2017-11-05 18 views
0

私はdata_timeライブラリをC++ cmakeプロジェクトにリンクしようと一日を過ごしています。`boost :: gregorian :: greg_month :: as_short_string()const 'への未定義の参照を作成する

だから私はcmake 3.4boost 1.61.0を使用しています。 私は現地時間がかかっている機能であるクラスがあります。

void TestClass::getTime() { 
    this->endDate = boost::posix_time::second_clock::local_time(); 
} 

は、それから私は、文字列を返す関数でendDateの値を返すようにしたい:

string testCalss::Info() { 
    return to_simple_string(this->beginningDate); 
} 

私はのタイプを変換する必要がありますがendDatestringに変更すると、関数は文字列型なので、

プログラムがリンクされている間、私はエラーメッセージを取得しています:

In function boost::date_time::month_formatter<boost::gregorian::greg_month, boost::date_time::simple_format<char>, char>::format_month(boost::gregorian::greg_month const&, std::ostream&)': 
/usr/include/boost/date_time/date_formatting.hpp:44: undefined reference to `boost::gregorian::greg_month::as_short_string() const' 
/usr/include/boost/date_time/date_formatting.hpp:49: undefined reference to `boost::gregorian::greg_month::as_long_string() const' 

私はdata_timeはヘッダのみ専用のライブラリではなく、私が構築し、私のプロジェクトに追加する必要があることを読みました。

私はcmakeプロジェクトでg++を使用しているため、このコマンドをgcc myapp.cpp -omyapp -lboost_date_timeとしても動作しません。g ++には何も見つかりませんでした。ライブラリをリンクする方法公式ブーストドキュメントから

c++ -I path/to/boost_1_61_0 example.cpp -o example \ 
    ~/boost/stage/lib/libboost_regex-gcc34-mt-d-1_36.a 

その例:

は私もこれを試してみました。 cmakeプロジェクトでは、 cppファイルがほとんどありません。ファイルを使用してこのコマンドを実行する必要があります。

このエラーを解決する簡単な方法はありますか?

答えて

0

この問題を解決する方法を見つけました。私が選ぶ方法は簡単です。まず、locate */boost/date_time*コマンドを使用して、boostdate_timeライブラリがどこにインストールされているかを調べました。どのバージョンのブーストライブラリを使用しているのかわからなかったので、locateコマンドをもう一度使って​​というファイルを見つけました。その後、私は私のCmakeLists.txtに数行を追加しました:すべてのザッツ

find_package(Boost 1.60.0 COMPONENTS date_time) 
if(Boost_FOUND) 
     include_directories(${Boost_INCLUDE_DIRS}) 
     target_link_libraries(Program ${Boost_DATE_TIME_LIBRARY}) 
endif() 

を。

関連する問題