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