1

私のプロジェクトのユーザーがこのエラーを報告してくれました。私のパソコンや研究室のサーバーでは再現できないので、こちらで質問させていただきます。

プロジェクトは CMake を使用してビルド環境を生成します。これは、FindBoost ユーティリティ (CMake で提供) を使用して Boost リソースを見つけます。

最初に、私のユーザーは、最終的なプログラムをリンクしているときに、コンパイラには正しい「/usr/lib64/libboost_XXX.so」ではなく「/usr/lib64/lib64/libboost_XXX.so」が提供されていると言いました。CMake がそのような奇妙なライブラリの場所を生成した理由を見つけることができず、変数Boost_LIBRARIESを手動で設定して出力するように依頼しました。

Boost libraries are: /usr/lib64/libboost_thread-mt.so;/usr/lib64/libboost_program_options-mt.so;/usr/lib64/libboost_filesystem-mt.so

物事は正しいようです。コンパイルは成功しました。しかし、リンクに行くと、プログラムは多くの未定義シンボルについて叫びます:

CMakeFiles/ht-filter.dir/ht-filter.cpp.o: In function `parse_options(int, char**)':
/public/home/yli/Downloads/htqc-0.15.0-Source/ht-filter.cpp:43: undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)'
......
/usr/local/include/boost/program_options/errors.hpp:372: undefined reference to `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)'

これは非常に多くのエラーの典型的な 2 つです。1 つはソース コードから、もう 1 つはブーストのヘッダーから見つけます。ソース コードの対応する行で、options_description オブジェクトを作成しました。

// I renamed boost::program_options to opt
opt::options_description opt_main("Options:");

私のユーザーの OS は CentOS 6.2 で、Boost バージョンは 1.50.0 で、これは私のコンピューターのものと似ています。私のユーザーのCMakeのバージョンは2.8.11で、これも私のものと同じです。

4

1 に答える 1