2013-07-04 4 views
16

Это задавали несколько раз, но я не знаю, что я делаю неправильно. Я пытаюсь получить текущую дату, минус 7. Вот Main:undefined ссылка на boost :: gregorian :: greg_month :: as_short_string() const

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

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

ответ

34

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

gcc myapp.cpp -omyapp -lboost_date_time 

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

+0

g ++ -o edv-urlaub-xml.exe "src \\ xml.o" "src \\ sql.o" "src \\ header \\ tinyxml2 \\ tinyxml2.o" "src \ \ config.o "" src \\ Main.o "-lodbc32 -lcomctl32 -lboost_date_time c:/mingw/bin /../ lib/gcc/mingw32/4.6.2 /../../../. ./mingw32/bin/ld.exe: не удается найти -lboost_date_time Можете ли вы сказать мне, что я делаю неправильно? Поразительно. – FRules

+1

После долгих 14 дней он наконец-то сработал. Благодарю. – FRules

+2

@ DominikNitschmann похоже, что вам нужна достойная машина. Время компиляции библиотеки boost должно быть определенно короче. – CyberGuy

2

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

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

Ссылка на форс см. click here.

EDIT: В соответствии с тем, что вы получили выше, проблема в том, что библиотека не может быть найдена, кажется, что mingw не знает, где она находится. Возможно, потребуется повторная установка mingw или вы можете указать конкретный путь библиотеки.

Удачи вам!

0

вы должны добавить ссылку 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) на пути компилятора
Удача

Смежные вопросы