28

コードをコンパイルしようとしていますが、エラーが発生します

への未定義の参照boost::program_options::options_description::m_default_line_length

Ubuntu 12.04 で g++ を使用しています。C++ プログラミングを行ったことはありますが、Linux 開発環境は初めてです (以前は IDE のみを使用していました)。

そこで、この問題について基本的な検索を行ったところ、リンクの問題がいくつか見つかりました。私は初心者なので、それらをよく理解していませんでした。これらの解決策のいくつかを読んで、私はさらに混乱しました。私のブースト ライブラリ フォルダは にあり/usr/includeます。一部のソリューションでは、 にある必要があり/usr/libます。しかし、ブーストフォルダーはありません。

何を変更する必要がありますか?

4

5 に答える 5

36

レポからブーストをインストールした場合は、それを使用するだけ-lboost_program_optionsで十分です。
ブースト ライブラリを他のライブラリにインストールした場合は、そのディレクトリを次のように指定する必要があります。-L/path/to/lib

CMakeでは指定できますset(CMAKE_CXX_FLAGS "-lboost_program_options")

ただし、CMakeでは使用する必要があります

FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(target ${Boost_LIBRARIES})
于 2012-08-29T13:39:26.143 に答える
4

C++11 標準のクラスに変更があり<string>、C++11 以外のコンパイラ (G++-4.8 など) でコンパイルされた Boost ライブラリのバージョンと競合する可能性があります。Boost を再コンパイルするか、Boost ライブラリのコンパイルに使用されたバージョンの C++ コンパイラを使用してみてください。

于 2016-09-22T01:02:42.650 に答える
1

ブースト ライブラリ (.so および .a で終わるファイル) はどこにありますか? それらを見つけて、これをリンク コマンドに追加します: -L/path/to/boost/libs -lname-of-boost-lib

これは、C++ を初めて使用するときに直面する最も一般的な問題です。SOには、おそらく他にも未定義の参照質問が1000あります。未定義の参照を検索するだけです。

于 2012-08-29T13:35:31.197 に答える