Non compila programma con boost

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Non compila programma con boost

    vbextreme ha scritto:


    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
    Sì, io nella suddetta cartella ho Jamfile.v2.

    Non ho capito cosa dovrei fare a questo punto.
    Apro il mio progetto in CB, Build Options->Linker->Add e aggiungo la cartella in cui è questo file?

    Oppure devo compilare qualcosa prima.

    Grazie mille
  • Re: Non compila programma con boost

    Allora il metodo piu semplice ma lento è questo:

    Apri C::B
    Crei un nuovo progetto Libreria statica e lo chiami "Gregorian"
    Ora copia nella directory della tua "libreria gregorian"(che ti ha creato c::b) i file contenuti in "/libs/date_time/src/gregorian"
    Ora torna nel progetto e rimuovi i file che ha messo di default c::b (per farlo prima chiudi i documenti nella tab con la x vicino al nome) poi clicchi il destro sul nome nella treeview e fai rimuovi a tutti i file.
    Ora hai un progetto vuoto,
    Clicca il destro sulla treeview nel nome progetto->add file
    ora nel path del tuo progetto selezioni tutti i file che hai precedentemente copiato.
    add
    compila.
    chiudi
    Apri il progetto che non ti va,build->option...->linker->add
    e selezioni "path mia libreria.../gregorian/bin/debug(se hai compilato in modo debug) (o) release (se hai compilato come release)/gregorian.a
    ora compila.
  • Re: Non compila programma con boost

    vbextreme ha scritto:


    Allora il metodo piu semplice ma lento è questo:

    Apri C::B
    Crei un nuovo progetto Libreria statica e lo chiami "Gregorian"
    Ora copia nella directory della tua "libreria gregorian"(che ti ha creato c::b) i file contenuti in "/libs/date_time/src/gregorian"
    Ora torna nel progetto e rimuovi i file che ha messo di default c::b (per farlo prima chiudi i documenti nella tab con la x vicino al nome) poi clicchi il destro sul nome nella treeview e fai rimuovi a tutti i file.
    Ora hai un progetto vuoto,
    Clicca il destro sulla treeview nel nome progetto->add file
    ora nel path del tuo progetto selezioni tutti i file che hai precedentemente copiato.
    add
    Sono arrivato fin qui.
    Oltre non va, perché anche qui non trova il file.
    Per alcuni ho risolto copiando l'indirizzo intero del file nella definizione di include.
    Per un altro non riesco a capire perché non trova il file, che però c'è.
    /home/xxxx/XXXX/boost_1_53_0/boost/date_time/date_generators.hpp|18|fatal error: boost/throw_exception.hpp: File o directory non esistente|
    ||=== Build finished: 1 errors, 0 warnings ===|

    segnala un errore a:
    #include <boost/throw_exception.hpp>
    che ho cambiato in
    #include "/home/xxxxx/XXXXX/boost_1_53_0/boost/throw_exception.hpp"
    ma niente. Eppure il file c'è nella cartella boost.

    Il problema è nel file date_generators.hpp.

    Nel progetto della libreria statica, sotto Source, ho 4 file:
    -date_generators.cpp
    -greg_month.cpp
    -greg_weekday.cpp
    -gregorian_types.cpp

    Sotto Headers:
    greg_names.hpp

    E' giusto?

    Come mai tanti problemi?

    Aiuto!!

    Vi ringrazio per la pazienza
  • Re: Non compila programma con boost

    Allora: NON MODIFICARE NIENTE!

    Ora che hai il progetto con i file devi compilare,se ti da l'errore è perchè ovviamente il compilatore non sa dove andare a cercare <boost/...> e allora torni in build options e aggiungi la directory contenente boost,non boost ma quella prima ovvero boost_1_.....
    Ora deve compilare obbligatoriamente.


    mai modificare gli header altrui,invece,modifica le impostazioni del compilatore.

    #include ".h" //cerco nella mia path base
    #include "/.../.h" //cerco in quella posizione
    #include <.h> //cerco in una serie di directory che ho detto al compilatore

    se ho quindi <boost/.h>
    o copio tutta la cartella dentro a "compilatore/include/" oppure dico al compilatore di aggiungere la directory.
  • Re: Non compila programma con boost



    Funziona!!
  • Re: Non compila programma con boost

    A questo punto devo chiedervi qualcosa, per diventare più indipendente e non infastidirvi con le molte mie domande...

    Come si fa a capire che mancano delle librerie non compilate? Dove era scritto? Qual è la differenza fra file.a, .hpp, .cpp, ecc...
    Cpp dovrebbe essere un file che contiene codice c++. E gli altri?
    Un minimo di spigazione per sapermi destreggiare, e soprattutto la differenza fra win e Unix/Linux.
    E poi non ho capito cosa significa compilare una libreria statica. Ho creato un eseguibile che poi deve utilizzare il mio codice? Non è mi è ben chiaro cosa ho fatto...

    E quindi in generale, cosa mettere in Linker Setting e cosa in Search Directories, quando creo un nuovo progetto?

    Ad esempio, smanettando ho trovato un altro codice da compilare. La mia curiosità si è fermata su questo: http://www.boost.org/doc/libs/1_53_0/libs/gil/example/histogram.cpp

    Ho creato un nuovo progetto, in Search Directories ho messo l'indirizzo di /boost_1.5.3/ ...
    Provo a compilare e da errore: nel file jpeg_io_private.hpp non trova la definizione di una serie di variabili. Esempio: jpeg_std_error, jpeg_CreateDecompress, ecc... che sicuramente saranno in qualche file che lui non trova. Dove li vado a pescare? Forse anche qui devo compilare qualcosa?

    Infinitamente grazie!!


    P.S. Cercando su google, ho trovato che qui serve la cosiddetta libreria statica libjpeg.a. Come la genero?
  • Re: Non compila programma con boost

    Undefinite reference
    Questo é l'errore quando manca una libreria
    No such file or directory
    Questo quando non trova l'header.

    È normale che agli inizii si faccia fatica a comprendere gli errori,tanta buona pratica e vedrai che sara tutto piu semplice

    .h sono gli header del c e non possono contenere codice
    .hpp header del cpp e possono contenere codice
    .c definizioni e codice c
    .cpp definizioni e codice cpp

    In windows le librerie sono le .dll e vengono gestite dal s.o. e sono dinamiche
    In linux hai le .a ovvero le statiche che vengono aggiunte al programma in fase di compilazione quindi la libreria compilata.a viene incorporata nel tuo programma.
    Ci sono anche le diamiche per linux che sono pressapoco come windows,ti conviene leggere in internet le varie tipooogie di librerie dei vari sistemi operativi.

    Per sapere che libreria ti occorre compilare basta leggere la documentazione.
    Ovvio che se ti serve la libreria pincopallino il codice sorgente sara
    '/libs/pincopallino/src'
  • Re: Non compila programma con boost

    Credo mi sia scelto un esempio complicato.

    In effetti ho trovato che questo esempio si basa su delle extension della libreria.
    Ho scaricato l'extension da qui, ho aperto il file install.txt ed ho seguito le istruzioni per l'installazione...
    ./configure
    make
    make test
    Sembra tutto ok. Apro il progetto libjpeg (libreria statica) che ho creato in C::B inserendo tutti i file scaricati. Compila ma trova degli errori sul codice...

    Il primo è nel file jmemdos.c.
    #ifndef USE_MSDOS_MEMMGR	/* make sure user got configuration right */
      You forgot to define USE_MSDOS_MEMMGR in jconfig.h. /* deliberate syntax error */
    #endif
    Mi pare giusto che 'You forgot to define...' sia un errore.
    Errorre fatto apposta, ma non ho capito cosa dovrei fare per non inciampare.
    Forse non ho letto bene io.

    Sono sulla strada giusta?
    Come risolvo sto problema?

    Ma compilando la libreria devo trovare un file.a che poi devo inserire nel mio progetto?

    Grazie
  • Re: Non compila programma con boost

    E quindi nessuno sa aiutarmi?
  • Re: Non compila programma con boost

    Stai facendo qualcosa al difuori delle tue potenzialità,se continuo ad aiutarti in definitiva non capirai nulla.
    L'unico consiglio che ti posso dare è quello di iniziare a fare qualche programma con le librerie boost.
    Inizia da quelle semplici e con semplici programmi,poi prosegui.
    Se non sai compilare un tuo programma come pensi di riuscire a compilare un programma altrui?
    Ci vuole pratica,pratica,pratica,pazienza,pratica,pazienza,pratica e tanta buona volontà.
  • Re: Non compila programma con boost

    Ok,
    ora provo qualche mio programma.

    Grazie
Devi accedere o registrarti per scrivere nel forum
25 risposte