|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
[C/C++] Compilazione Thread POSIX
Salve a tutti,
Da un po di tempo mi e venuto il pallino di imparare la programmazione con i thread in C. googlando ho visto che bisogna inserire tra le opzioni di gcc l'opzione -lpthread ma quando lo lancio l'output e questo: gcc -o threadProve threadProve.c –lpthread gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 premetto che il sorgente in questione e il classico esempio di utilizzo di thread sincronizzati tramite pthread_mutex_* e nient'altro. Anche provando ad installare altre librerie messe a disposizione dalla mia distro (debian lenny) non son riuscito a risolvere... Grassie in anticipo per ogni suggerimento |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
libpthread.a fa parte del pacchetto glibc, ma dovresti averlo gia' installato se non hai errori in compilazione e trova "pthread.h".
(a meno che non hai installato solo i glibc-headers) Prova a fare un whereis libpthread da command line, per vedere se e' localizzato sulla tua macchina... se cosi' fosse prova a specificare il percorso di dove e' ubicato il file, al compilatore, con l'opzione -Lpercorso. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
uoo grazie per la risposta!! stavo quasi per disperare
il comando mi da due coppie di di percorsi anzi te lo posto /usr/lib/libpthread.a /usr/lib/libpthread.so /usr/lib64/libpthread.a /usr/lib64/libpthread.so adesso provo |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
questo e il risultato di quattro tentativi consecutivi....non essendo molto sicuro della sintassi...
ale@debian:~/Desktop/sosr/src$ make threadProve gcc -o threadProve threadProve.c –lpthread -L /usr/lib/libpthread.so gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 ale@debian:~/Desktop/sosr/src$ make threadProve gcc -o threadProve threadProve.c –lpthread -L /usr/lib gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 ale@debian:~/Desktop/sosr/src$ make threadProve gcc -o threadProve threadProve.c –lpthread -L/usr/lib gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 ale@debian:~/Desktop/sosr/src$ make threadProve gcc -o threadProve threadProve.c –lpthread -L/usr/lib/libpthread.so gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 come vedi...niente..forse va specificato prima il path della libreria??? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
Visto che hai ubuntu a 64bit per default compila a 64bit... per cui la sintassi e':
gcc -o threadProve threadProve.c –lpthread -L/usr/lib64 Se vuoi compilare a 32bit devi specificare l'opzione -m32. gcc -m32 -o threadProve threadProve.c –lpthread -L/usr/lib |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
avevo gia provato ma niente continua a "non trovare" il file -lpthread
ti posto ancora l'output della console per chiarezza: ale@debian:~/Desktop/sosr/src$ make threadProve gcc -o threadProve threadProve.c –lpthread -L/usr/lib64 gcc: –lpthread: No such file or directory make: *** [threadProve] Error 1 e cmq lib64 non dovrebbe essere solo un link alla cartella /usr/lib??? P.S. ...io non uso ubuntu...la mia e una debian dura e pura |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
E perche' ho immaginato che avessi ubuntu? ...
Nemmeno io ho ubuntu... e nemmeno una debian... Comunque poco dovrebbe cambiare. Puo' essere un symbolic link, al limite verifica... Qui da me, su Fedora, /usr/lib64 contiene le libraries a 64bit e /usr/lib quelle a 32bit, nessun symbolic link... ma alcune distribuzioni usano /usr/lib32 per le lib a 32bit e /usr/lib come simbolic link per puntare alla directory di default. Ho appena provato a compilare un mio programma da command line, con entrambi i comandi che ho postato... e non ho problemi sia a 32 che a 64 bit. Prova ad aggiungere l'opzione -Wl,-verbose: non risolve il problema ma dice al linker di essere "prolisso"... e nell'output si possono controllare i percorsi di ricerca delle libraries che cerca, dove le cerca, e che usa. Insomma una cosa del genere: gcc -Wl,-verbose -o threadProve threadProve.c –lpthread -L/usr/lib64 P.S. L'output e' lungo... per cui al limite ridirigi su file... anche se l'output dei percorsi di ricerca e' solo l'ultima parte. Se poi vuoi postare, posta solo quella. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
Scusa... ci sto facendo caso solo adesso... mi aspetterei un messaggiod del linker tipo:
/usr/bin/ld: cannot find -lpthread Un messaggio del tipo: gcc: –lpthread: No such file or directory mi sembra piu' come se gcc cercasse -lpthread, come file da compilare... e "ovviamente" non lo trovasse. Che versionde di gcc hai? gcc -v Stai usando sempre il makefile? Prova da linea di comando... al limite. |
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
ok allora la versione di gcc e la 4.3.2-1.1
il comando gcc -v tra le altre cose mi fa vedere anche le opzioni con cui e configurato, tra queste ho notato l'opzione "--enable-threads=posix" il che mi sembra confortante... per quanto riguarda l'uso del makefile non ho visto nessuna differenza anche perche e mooolto semplice contiene solo il target e il comando gcc senza variabili ne condizioni...e adesso la cosa piu divertente: l'opzione verbose non mi dice assolutamente niente!!!!! o cmq niente di piu..ti incollo per credere: ale@debian:~/Desktop/sosr/src$ gcc -Wl,-verbose -o threadProve threadProve.c –lpthread -L/usr/lib64 gcc: –lpthread: No such file or directory ale@debian:~/Desktop/sosr/src$ sembra che questo sia tutto... a gia..riguardo alle librerie...essendo che ho "rubacchiato" un testo di un progetto scolastico non dovrebbe proprio cambiare niente se si compila a 32 o a 64...anche perche si tratta proprio solo di utilizzare lo standard posix |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
E' come pensavo... -Wl,-verbose e' un'opzione da passare al linker, ma al linker non c'arriva proprio... sta cercando -lpthread come file da compilare.
Prova a spostare le opzioni, secondo le direttive dell'help: gcc -Wl,-verbose –lpthread -L/usr/lib64 -o threadProve threadProve.c Oppure prova a compilare solo con -c... e poi linkare con ld. Anche se anche io ho la 4.3.2-7... e compila senza una grinza. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
O ancora meglio... passi direttamente al linker le direttive:
gcc -Wl,-verbose,–lpthread,-L/usr/lib64 -o threadProve threadProve.c o senza l'opzione -verbose: gcc -Wl,–lpthread,-L/usr/lib64 -o threadProve threadProve.c |
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 20
|
guarda...io non so che dire...piu uso il C per programmare e piu mi convinco che gcc in realta non sia un programma ma un bambino capriccioso e lunatico!!!! davvero non ha motivo!!
ho provato adesso a fare come mi dicevi tu ad invertire le opzioni e niente sempre lo stesso risultato... allora mi son collegato in remoto al server della scuola che usa gcc 3.4.1 (architettura Sun Sparc qualcosaltro) faccio un paio di tentativi sempre lo stesso risultato...provo un ultima volta e..tadaaa...me lha compilato!!!! al che gia rassegnato a dover sviluppare tutto su vi in remoto (che equivale al suicidio....) faccio un ultimo tentativo in locale e...tadaaa!!! ha funzionato!!! .... Si ok son contento di esserci riuscito...ma non ha senso!!!! Secondo te puo esistere una motivazione logica a tutto cio??? |
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 2
|
Credo che ormai, dopo quasi 2 anni, a chi ha postato la domanda, questa risposta non sarà più utile, ma spero che sia utile a qualcun'altro, che come me è appena incappato in questo problemino.
Mi spiego, quando si lancia dalla shell il comando, si deve fare attenzione al "-" che si trova davanti a lpthread. Se si guarda bene è diverso da quello scritto davanti al "-o", è più lungo rispetto ai precendenti. Questo è solo un banale problema di copia/incolla. Basta cancellarlo e mettere il trattino normale e il problema scompare. Un saluto a tutti Ultima modifica di Missionario86 : 10-02-2011 alle 22:05. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:04.



















