コードをコンパイルしようとしていますが、エラーが発生します
boost::program_options::options_description::m_default_line_length
への未定義の参照
Ubuntu 12.04でg ++を使用しています。私はいくつかのC++プログラミングを実行しましたが、Linux開発環境は初めてです(以前はIDEのみを使用していました)。
そこで、私はこの問題について基本的な検索を行い、いくつかのリンクの問題を見つけました。私は初心者なので、よくわかりませんでした。それらの解決策のいくつかを読んで、私はさらに混乱しました。ブーストライブラリフォルダーは/usr/include
にあります。いくつかの解決策は、それが/usr/lib
にあるべきだと言っています。しかし、ブーストフォルダーはありません。
何を変更する必要がありますか?
Repoからboostをインストールした場合は、_-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})
_
C++ 11標準の<string>
クラスに変更があり、C++ 11以外のコンパイラ(G ++-4.8など)でコンパイルされたBoostライブラリのバージョンと競合する可能性があります。 boostを再コンパイルするか、Boostライブラリのコンパイルに使用されたバージョンのC++コンパイラを使用してみてください。
また、プリプロセッサ変数_GLIBCXX_USE_CXX11_ABI
の設定が、ブーストのコンパイルに使用された変数の設定と同じであることを再確認してください。変数のデフォルト設定は、Linuxディストリビューションおよび使用するGNUコンパイラーのバージョンによって異なります。
詳細は Dual ABI を参照してください。
ブーストライブラリ(.soおよび.aで終わるファイル)はどこにありますか?それらを見つけ、これをリンクコマンドに追加します。-L/path/to/boost/libs -lname-of-boost-lib
これは、C++を初めて起動するときに人々が直面する最も一般的な問題でなければなりません。 SOにはおそらく他に1000の未定義の参照質問があります。未定義の参照を検索するだけです。
ライブラリは通常/usr/lib
にインストールされます(たとえば、私のシステムでは/usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.58.0
)。
これらのライブラリとリンクするコードをコンパイルするには、通常、/usr/include
で提供されるヘッダーファイルを使用します。
多くのライブラリーとは異なり、Boostにはpkg-configファイルが付属していないため、リンカーフラグを自分で追加する必要があります。通常のMakefileルールでは、LDLIBS += -lboost_program_options
のようなものが必要になります。
libboost-dev
パッケージはprogram_options
のヘッダーを提供しますが、対応するライブラリを取得するにはlibboost-program-options-dev
もインストールする必要があることにも注意してください。