web-dev-qa-db-fra.com

référence non définie à boost :: gregorian :: greg_month :: as_short_string () const

Cela a été demandé à plusieurs reprises, mais je ne sais pas ce que je fais mal. J'essaie d'obtenir la date actuelle soustraite de 7. Voici le texte principal:

#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;
}

Lorsque j'essaie de le compiler, j'obtiens l'erreur suivante.

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'

Quelqu'un peut-il aider? Je pensais avoir inclus les fichiers nécessaires.

19
FRules

Boost date_time n'est pas une bibliothèque d'en-tête uniquement. S'il vous plaît construire la bibliothèque, puis l'ajouter. Simple en gcc:

gcc myapp.cpp -omyapp -lboost_date_time

(Attention! Cette bibliothèque sournoisement semble fonctionne comme une bibliothèque d’en-tête uniquement aux niveaux d’optimisation -O2 et supérieurs, en raison de l’inligne; elle ne pourra pas être liée lorsque vous utilisez des niveaux d’optimisation inférieurs où le compilateur n’est pas en ligne. aussi agressif.)

36
CyberGuy

Je pense que le compilateur se plaint de l'inclusion de boost lib.

Pour utiliser boost :: gregorian (boost :: date_time), vous devez utiliser bjam pour créer la bibliothèque boost, puis la lier à la lib. FileSystem. 

La référence du boost voir cliquez ici .

EDIT: Selon ce que vous avez dit ci-dessus, le problème est que la bibliothèque est introuvable, mingw semble ne pas savoir où elle se trouve. Une réinstallation de mingw peut être nécessaire ou vous pouvez essayer de spécifier le chemin spécifique de la bibliothèque.

Bonne chance!

2
Imemmaw

vous devriez ajouter le lien lib nommé 

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

(mon chemin 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) au chemin du compilateur
Bonne chance

0
user2749562