Undefined ссылка на boost:: gregorian:: greg_month:: as_short_string() const

Это задавали несколько раз, но я не знаю, что я делаю неправильно. Я пытаюсь получить текущую дату, вычитаемую на 7. Здесь Main:

#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'

Может ли кто-нибудь помочь? Я думал, что я включил необходимые файлы.

Ответы

Ответ 1

Boost date_time - это не только библиотека, предназначенная только для заголовков. Пожалуйста, создайте библиотеку, а затем добавьте ее. Простой в gcc:

gcc myapp.cpp -omyapp -lboost_date_time

(Будьте осторожны! Эта библиотека, похоже, работает как библиотека только для заголовков на уровнях оптимизации -O2 и выше из-за вложения, но она не сможет связываться, когда вы используете более низкие уровни оптимизации, где компилятор inliner isn ' t как агрессивный.)

Ответ 2

Я думаю, что компилятор жалуется на включение boost lib.

Чтобы использовать boost:: gregorian (boost:: date_time), вам нужно использовать bjam, чтобы создать дополнительную библиотеку, а затем связать ее с файловой системой.

Ссылка на boost см. нажмите здесь.

РЕДАКТИРОВАТЬ: В соответствии с тем, что вы получили выше, проблема в том, что библиотека не может быть найдена, кажется, что mingw не знает, где она находится. Возможно, потребуется повторная установка mingw или вы можете попытаться указать конкретный путь библиотеки.

Удачи!

Ответ 3

вы должны добавить ссылку lib с именем

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

(мой путь 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) к пути компилятора
Удачи.