2013-07-04 6 views
16

Dies wurde mehrmals gefragt, aber ich weiß nicht, was ich falsch mache. Ich versuche, das aktuelle Datum 7. abgezogen zu bekommen Hier ist der Main:undefined Verweis auf 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; 
} 

Wenn ich versuche, es zu kompilieren wir die folgende Fehlermeldung erhalten.

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' 

Kann jemand helfen? Ich dachte, ich habe die notwendigen Dateien enthalten.

Antwort

34

Boost date_time ist keine Nur-Header-Bibliothek. Bitte erstellen Sie die Bibliothek und fügen Sie sie dann hinzu. ! Einfach in gcc:

gcc myapp.cpp -omyapp -lboost_date_time 

(Vorsicht Diese Bibliothek erscheint sneakily als Kopf nur Bibliothek auf Optimierungsstufen -O2 und höher zu arbeiten, aufgrund inlining, aber es wird verbinden fehlschlagen, wenn Sie niedriger verwenden Optimierungsstufen, wo die Inliner des Compilers nicht so aggressiv ist.)

+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_datum_zeit c:/mingw/bin/../ lib/gcc/mingw32/4.6.2 /../../../. ./mingw32/bin/ld.exe: kann -lboost_date_time nicht finden Können Sie mir sagen, was ich falsch mache? Ich werde wirklich frustriert. – FRules

+1

Nach langen 14 Tagen hat es endlich geklappt. Vielen Dank. – FRules

+2

@DominikNitschmann sieht aus, als ob Sie eine anständige Maschine brauchen. Die Kompilierungszeit der Boost-Bibliothek sollte definitiv kürzer sein. – CyberGuy

2

Ich denke, der Compiler beschweren sich über die Aufnahme von Boost-Lib.

Um boost :: gregorian (boost :: date_time) zu verwenden, müssen Sie bjam verwenden, um eine Boost-Bibliothek zu erstellen und diese dann mit der FileSystem-Bibliothek zu verknüpfen.

Die Referenz von Boost siehe click here.

EDIT: Nach was Sie oben haben, ist das Problem, dass die Bibliothek nicht gefunden werden kann, Mingw scheint nicht wissen, wo es ist. Möglicherweise ist eine Neuinstallation von Mingw erforderlich, oder Sie können versuchen, den spezifischen Pfad der Bibliothek anzugeben.

Viel Glück!

0

Sie den Link lib Namen hinzufügen sollten

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

(mein Weg 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), um den Pfad des Compilers
Glück