Non compila programma con boost

di il
25 risposte

Non compila programma con boost

Salve a tutti,
non riesco a far compilare questo programma preso come esempio della libreria boost:
#include <iostream>
#include </home/saverio/Sviluppo/boost_1_53_0/boost/lambda/lambda.hpp>
#include <iterator>
#include <algorithm>
#include "boost/date_time/gregorian/gregorian.hpp"
using namespace std;
using namespace boost::gregorian;



int
main()
{


  std::string s;
  std::cout << "Enter birth day YYYY-MM-DD (eg: 2002-02-01): ";
  std::cin >> s;
  try {
    date birthday(from_simple_string(s));
    date today = day_clock::local_day();
    days days_alive = today - birthday;
    days one_day(1);
    if (days_alive == one_day) {
      std::cout << "Born yesterday, very funny" << std::endl;
    }
    else if (days_alive < days(0)) {
      std::cout << "Not born yet, hmm: " << days_alive.days()
                << " days" <<std::endl;
    }
    else {
      std::cout << "Days alive: " << days_alive.days() << std::endl;
    }

  }
  catch(...) {
    std::cout << "Bad date entered: " << s << std::endl;
  }
  return 0;
}


L'errore che da è il seguente:
undefined reference to `boost::gregorian::greg_month::get_month_map_ptr()'

In pratica l'errore è al rigo 67 del file data_parsing.hpp, cioé:
typename month_type::month_map_ptr_type ptr = month_type::get_month_map_ptr();
Come posso risolvere?
Sto usando Code Block su Ubuntu 12.04 64 bit

Grazie

25 Risposte

  • Re: Non compila programma con boost

    sps ha scritto:


    undefined reference to `boost::gregorian::greg_month::get_month_map_ptr()'
    te lo dice chiaramente controlla il file di include "boost/date_time/gregorian/gregorian.hpp"
    le cose possono essere 2
    1) avrai commesso qualche errore nella definizione dell'oggetto.
    2) il file di include non sta nel percorso che tu gli hai indicato.

    spero di esserti stato d' aiuto.
  • Re: Non compila programma con boost

    Semplicemente non hai linkato le librerie,hai solo incluso i file header.

    Project->Build option->Linker Setting->Add

    ora ricerca le librerie necessarie(.a)

    Compila e vedrai che funziona.
  • Re: Non compila programma con boost

    Grazie per aver risposto.

    Non ho capito però dove dovrei cercare le librerie .a

    Grazie ancora
  • Re: Non compila programma con boost

    Ho capito dove è il problema.

    Lui non trova i file richiamati con ad esempio
    #include <boost/>
    e quindi io gli sostituisco
    #include </home/.../.../boost/...>
    e va avanti...

    Solo che questa sostituzione bisogna farli per un sacco di file. Ogni volta, sistemato un file, compila e se ne presenta un altro.

    Visto che i file sono così tanti non c'è un mode su CodeBlock per sostituirli tutti in un colpo solo?

    Grazie
  • Re: Non compila programma con boost

    Aiuto...

    Non finiscono mai....
  • Re: Non compila programma con boost

    La prima regola del programmatore è quella di capire il linguaggio!

    Allora con la direttiva:

    #include "nomefile.h"

    includo il file che è nella directory principale.
    con:

    #include <nomefile.h>

    includo il file che è in una serie di directory che sa il compilatore.

    La seconda regola è quella di usare la testa.
    Come faccio se io ho tutti gli header di un progetto in una cartella chiamata "asoque"?
    Posso mica informare il compilatore di aggiungere una determinata directory tra quelle che sa già?
    bho? e se provo ad andare:

    project->build options...

    vediamo cosa ciò qua?che opzioni ha il compilatore?
    ummm bello quel tab chiamato "Search Directories",cliccato,uaaa!,compiler!,add!! provo aggiungendo la cartella contenente tutti gli header,zacchete ora va!Miracolo!...........

    Non voglio offendere nessuno,tantomeno te,prova a spistolare con i menu a tendina e prova a cliccare a destra e a manca e vedi cosa succede,questo è il miglior manuale che esista.ehehehehh
  • Re: Non compila programma con boost

    Purtroppo il tuo suggerimento l'avevo già praticato ma non va.

    In Search Directories avevo settato il percorso in Compiler, Linker e Resource Compiler. Niente.


    Ti ringrazio molto per le tue spiegazioni. Sono inesperto e sono qui per imparare. Scusami per la banalità.

    Altra soluzione?
  • Re: Non compila programma con boost

    Ricominciamo:

    uno posta i percorsi di boost completi.
    due posta gli errori che ti da.

    Stai sbagliando a linkare le librerie e a includere gli header.
  • Re: Non compila programma con boost

    Naturalmente avrai letto
    Spiega bene come muoversi.
  • Re: Non compila programma con boost

    Ricominciamo tutto d'accapo!

    Scarico boost da qui.

    Estraggo tutto nella cartella boost_1_53_0. Posso già usare boost? Io non ricordo qui cosa ho fatto. Forse per usare i binari devo installare e io non l'ho fatto. Non mi è chiaro questo passaggio... perché dice che se si vogliono usare i binari ecc... bisogna installare...ma non ho ben capito di che si tratta. Ad ogni modo non ho capito quale configurazione scegliere: 'Select your configuration options and invoke ./bootstrap.sh again without the --help'.

    Scasami per le domande stupide o assurde ma sono alle prime armi.

    Grazie
  • Re: Non compila programma con boost

    Come errore da il classico:
    ||=== I_esempio, Debug ===|
    /home/xxxx/Sviluppo/boost_1_53_0/boost/tuple/tuple.hpp|23|fatal error: boost/config.hpp: File o directory non esistente|
    ||=== Build finished: 1 errors, 0 warnings ===|
  • Re: Non compila programma con boost

    Come dice la documentazione,una volta decompresso puoi usare subito boost.
    Infatti la maggior parte di boost non son altro che file header.
    Ci sono alcuni frammenti di codice che però se vuoi utilizzarli devi compilarli.

    Vai nella documentazione che ti ho linkato e portati al punto 2
    Spiega le directory,ora muoviti nella directory principale di boost e controlla di avere tutte quelle directory.Io ho provato a scaricare dal tuo link ma non va,è poi in formato bz2 che tanto mi puzza di linux.
    Prova quindi a scaricarla da qui

    .Apri Code::Blocks
    .Nuovo Progetto
    .console
    .c++
    .project->build options...
    .search directories
    .add
    selezioni "c:\......\boost_1_53_0\ (dove dentro c'è la cartella nominata boost)

    ora per vedere che sia tutto in ordine copia il codice della documentazione al punto 4 compila.
  • Re: Non compila programma con boost

    vbextreme ha scritto:


    ... in formato bz2 che tanto mi puzza di linux.
    Non è che puzza, sono su Ubuntu 12.04LTS 64bit (l'ho scritto all'inizio).
    La cartella scaricata ha la stessa configurazione di quella descritta, con qualche file in più. Ad esempio ho anche boost.css, boost.png, boostcpp.jam, ecc..

    Comunque, il codice di prova funziona: 0 errors, 0 warnings.

  • Re: Non compila programma con boost

    Mi era sfuggito il pinguino...

    Ok allora se compila quel codice sei configurato bene.
    ma usi la date/time ! mannaggia va compilata,quella fa parte del set di librerie che richiedono la compilazione.
    se vai in "boost_1_53_0/libs/date_time/"
    noterai che c'è anche la directory "build" questo lascia intendere che c'è una sorta di libreria da compilare,ora se entri li troverai il file .v2 per jam ,altrimenti vai in:
    "boost_1_53_0/libs/date_time/src/gregorian"
    crei un nuovo progetto(sotto linux sarà libreria statica che di da un bel file.a) ci cacci tutto dentro,compili.
    Ora nel tuo programma linki nelle build options...->linker->add
    e ci cacci il percorso completo della libreria.
Devi accedere o registrarti per scrivere nel forum
25 risposte