23

これは何度か尋ねられましたが、何が間違っているのかわかりません。現在の日付から 7 を引いて取得しようとしています。メインは次のとおりです。

#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/date_formatting.hpp>
#include <boost/date_time/gregorian/greg_month.hpp>


using namespace std;
using namespace boost::gregorian;

int main(int argc, char **argv) {

    time_t rawtime;
    struct tm *timeinfo;

    time (&rawtime);
    timeinfo = localtime (&rawtime);

    date cdate(timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday);
    cdate += date_duration(-7);

    string date = to_iso_string(cdate);
    cout << date << endl;
    return 0;
}

コンパイルしようとすると、次のエラーが発生します。

E:/include/boost/date_time/date_formatting.hpp:44: undefined reference to `boost::gregorian::greg_month::as_short_string() const'
E:/include/boost/date_time/date_formatting.hpp:49: undefined reference to `boost::gregorian::greg_month::as_long_string() const'

誰でも助けることができますか?必要なファイルを含めたと思いました..

4

4 に答える 4

45

Boost date_time はヘッダーのみのライブラリではありません。ライブラリをビルドしてから追加してください。gccで簡単:

gcc myapp.cpp -omyapp -lboost_date_time

(注意してください! このライブラリは、最適化レベル以上では、インライン化により、こっそりとヘッダーのみのライブラリとして機能するように見え-O2ます。ただし、コンパイラのインライン化がそれほど積極的ではない、より低い最適化レベルを使用すると、リンクに失敗します。)

于 2013-07-04T19:51:37.233 に答える
1

コンパイラは、ブースト ライブラリが含まれていることについて不平を言っていると思います。

boost::gregorian(boost::date_time) を使用するには、 bjamを使用して boost ライブラリをビルドし、それを FileSystem ライブラリにリンクする必要があります。

ブーストのリファレンスはこちらをご覧ください。

編集:あなたが上で得たものによると、問題はライブラリが見つからないことです.mingwはそれがどこにあるのかわからないようです. mingw の再インストールが必要になるか、ライブラリの特定のパスを指定してみてください。

幸運を!

于 2013-07-04T19:50:09.427 に答える
0

という名前のリンク lib を追加する必要があります

libboost_date_time-mgw46-d-1_54.dll.a

(my path D:\My Documents\Downloads\boost_1_54_0\bin.v2\libs\date_time\build\gcc-mingw-4.6.2\debug\libboost_date_time-mgw46-d-1_54.dll.a) コンパイラのパスへ
頑張ってください

于 2013-09-24T09:31:38.353 に答える