Entra

View Full Version : Problema linkaggio libreria con eclipse


vendicatorex
24-07-2010, 12:00
Salve:) ho un codice scritto in c++ che non riesco a compilare con eclipse. Il codice non ha problemi in quanto riesco a compilarlo a riga di comando con ubuntu. Il problema è che il codice fa uso di una libreria esterna di nome JTC. Quando tento di compilare con Eclipse mi si presentano i seguenti errori

**** Build of configuration Debug for project Barriera ****

make all
Building target: Barriera
Invoking: GCC C++ Linker
g++ -Lpthread -o"Barriera" ./barrieramia.o -lJTC
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(Thread.o): In function `JTCThread::start()':
Thread.cpp:(.text+0x1b94): undefined reference to `pthread_attr_setstacksize'
Thread.cpp:(.text+0x1bc3): undefined reference to `pthread_create'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(Thread.o): In function `JTCThread::exit_hook()':
Thread.cpp:(.text+0x2f2f): undefined reference to `pthread_detach'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(TSS.o): In function `JTCTSS::get(unsigned int)':
TSS.cpp:(.text+0x3d): undefined reference to `pthread_getspecific'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(TSS.o): In function `JTCTSS::allocate(void (*)(void*))':
TSS.cpp:(.text+0x5f): undefined reference to `pthread_key_create'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(TSS.o): In function `JTCTSS::allocate()':
TSS.cpp:(.text+0x639): undefined reference to `pthread_key_create'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(TSS.o): In function `JTCTSS::set(unsigned int, void*)':
TSS.cpp:(.text+0xc0e): undefined reference to `pthread_setspecific'
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libJTC.a(TSS.o): In function `JTCTSS::release(unsigned int)':
TSS.cpp:(.text+0x12b2): undefined reference to `pthread_key_delete'
collect2: ld returned 1 exit status
make: *** [Barriera] Errore 1


aggiungo che ho già provveduto ad entrare nelle proprietà del progetto e seguendo il percorso C/C++ Build->Settings poi GCC C++ Linker dentro "Libraries(-l)" ho inserito "JTC" mentre dentro "Library search path(-L)" ho inserito "pthread"

Non capisco esattamente quale sia il problema però ho osservato che il comando invocato da eclipse è
g++ -Lpthread -o"Barriera" ./barrieramia.o -lJTC
mentre quello funzionante che invoco manualmente da console di ubuntu è
g++ -o maxbarrieramia maxbarrieramia.cpp -lJTC -lpthread

spero che qualcuno che conosce questa libreria ed eclipse possa aiutarmi:help:

fero86
24-07-2010, 12:53
aggiungo che ho già provveduto ad entrare nelle proprietà del progetto e seguendo il percorso C/C++ Build->Settings poi GCC C++ Linker dentro "Libraries(-l)" ho inserito "JTC" mentre dentro "Library search path(-L)" ho inserito "pthread"

Non capisco esattamente quale sia il problema però ho osservato che il comando invocato da eclipse è
g++ -Lpthread -o"Barriera" ./barrieramia.o -lJTC
mentre quello funzionante che invoco manualmente da console di ubuntu è
g++ -o maxbarrieramia maxbarrieramia.cpp -lJTC -lpthread

spero che qualcuno che conosce questa libreria ed eclipse possa aiutarmi:help: io tutta sta gente che usa eclipse per programmare in C++ non la capisco :mbe:

COMUNQUE. il problema mi sembra evidente no? stai passando "pthread" all'opzione -L anziché -l.

EDIT - mi spiego meglio: specificando una cartella inesistente di nome "pthread" come search path, rendi impossibile la ricerca della libreria JTC.

vendicatorex
24-07-2010, 14:40
Grazie era proprio questo il problema:D
comunque non ci vedo nulla di strano ad utilizzare eclipse con c++ a me piace molto e per una mia curiosità quale sarebbe secondo te la piattaforma giusta per c++

fero86
24-07-2010, 14:49
il fatto é che io non credo minimamente nella storia degli IDE cross-language, i diversi linguaggi di programmazione hanno necessariamente bisogno di strumenti grafici specifici, infatti quando si usa il CDT in eclipse restano molte "appendici" inutilizzate: ora magari non saró aggiornatissimo sulla situazione, ma quando io l'ho provato gli strumenti di refactoring di eclipse erano praticamente tutti non funzionanti.

se si cerca di realizzare un IDE cross-language viene fuori come minimo un software troppo complicato, e giá non é che sia facile oggi realizzare un IDE "standard".

detto questo, che io sappia il mondo Linux é carente di IDE per C/C++: se programmo su Windows uso Visual C++ senza pensarci due volte, ma temo che per Linux il meglio che ci sia sia Code::Blocks... :S

vendicatorex
24-07-2010, 15:28
Capisco...rimane comunque questione di gusti per esempio a me non è piaciuto molto visual C++ anche se a dire il vero l'ho usato poco, mentre invece ho trovato carino codeblocks, quello che continuo a preferire è comunque eclipse che ha sicuramente dei difetti ma almeno con le nuove versioni non mi ha mai dato grossi problemi

fero86
24-07-2010, 16:54
ma intendiamoci, io mi trovo benissimo in eclipse, ma lo uso esclusivamente per Java: non potrei mai dire che mi trovo benissimo a programmare in C++ in eclipse (lo dico invece per Visual C++).

DanieleC88
24-07-2010, 18:18
detto questo, che io sappia il mondo Linux é carente di IDE per C/C++: se programmo su Windows uso Visual C++ senza pensarci due volte, ma temo che per Linux il meglio che ci sia sia Code::Blocks... :S

Se sviluppi su Linux si intende che sviluppi anche per Linux: in quel caso puoi agilmente ricorrere ad Anjuta (per GTK+) o KDevelop (per Qt/KDE), con tutti gli strumenti del caso, template di progetti già fatti, script per la distribuzione dei pacchetti, etc...

marco.r
25-07-2010, 22:36
se si cerca di realizzare un IDE cross-language viene fuori come minimo un software troppo complicato, e giá non é che sia facile oggi realizzare un IDE "standard".

eclipse non e' un editor monolitico visto che senza plugin appositi non supporta alcun linguaggio. Diciamo che e' piu' un ambiente di sviluppo per scrivere IDE :mbe:
Il plugin per C++ e' sempre stato meno sviluppato di quello per Java, da qui le carenze.

Questo detto ci sono diversi motivi per cui uno potrebbe decidere di usarlo. Ad esempio e' cross-platform (a differenza di VS), ci sono diversi strumenti opensource e no per estenderlo in vari modi (e.g. sviluppo model based).
Senza contare che ormai diversi ambienti real-time commerciali (QNX e VxWorks in primis) hanno il loro ambiente di sviluppo che gira in eclipse. Direi che la scelta non e' cosi' scontata...