|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
[C] GCC linker, come funziona?
buongiorno a tutti,
mi sto cimentando per la prima volta a creare un piccolo gioco in OPENGL utilizzando le librerie allegro e allegroGL ...ovviamente scritto in linguaggio C mi sto divertendo un mondo ed i risultati sono già arrivati, mi manca da inserire la musica nel mio giochino, e per far questo ho scelto di utilizzare la libreria dumb: http://dumb.sourceforge.net/ aggiungo l'include, aggiungo le funzioni all'interno del gioco, ma alla compilazione con gcc mi restituisce "undefined reference" per ogni funzione della libreria dumb utilizzata questi sono i miei include: #include <stdio.h> #include <aldumb.h> #include <allegro.h> #include <alleggl.h> tutti i file si trovano correttamente in /usr/include/ questa è la riga per la compilazione gcc -laldmb -ldumb `allegro-config --libs` -lagl -lGL -lGLU -o campostellato campostellato.c con `allegro-config --libs` importo i percorsi per le librerie allegro il comando restituisce: -L/usr/lib -Wl,--export-dynamic -lalleg-4.2.0 -lalleg_unsharable -lagl -lGL -lGLU mi linkano tutto l'occorrente per l'OPENGL e funzionano correttamente le righe incriminate sono -laldmb -ldumb, che il compilatore accetta ma alla fine non linka non vi sto chiedendo se dumb funziona o meno, come ho detto è la prima volta che mi cimento con il C e volevo capire "che cosa andare a guardare" per controllare che il linker possa compretare correttamente il suo lavoro grazie!
__________________
stabilmente instabile |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Non conosco questa libreria e non so come l'hai installata nel sistema ma ti posso dire questo: se hai specificato -laldmb -ldumb allora va a cercare nella directory che contiene le librerie (in genere /usr/lib) due file libaldmb.a e libdumb.a.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
l'ho installata con un semplice make + make config
al make mi ha chiesto il percorso di installazione ed io l'ho spostato da quello proposto /usr/local/ a /usr/ posso dirti che i file sono presenti in: Codice:
[giacomo@Jarchy lib]$ pwd /usr/lib [giacomo@Jarchy lib]$ ls -la |grep libaldmb.a -rw-r--r-- 1 root root 17112 1 mar 12:52 libaldmb.a [giacomo@Jarchy lib]$ ls -la |grep libdumb.a -rw-r--r-- 1 root root 327230 1 mar 12:52 libdumb.a
__________________
stabilmente instabile |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
ho ricercato nei sorgenti di dumb ed ho trovato le funzioni che ho usato all'interno del mio programma
ho ricompilato e reinstallato la libreria dumb! [root@Jarchy dumb-0.9.3]# make install cp lib/unix/libdumb.a /usr/lib cp lib/unix/libdumbd.a /usr/lib cp examples/dumbout examples/dumb2wav /usr/bin cp include/dumb.h /usr/include cp lib/unix/libaldmb.a /usr/lib cp lib/unix/libaldmd.a /usr/lib cp examples/dumbplay /usr/bin cp include/aldumb.h /usr/include DUMB has been installed. See readme.txt for details on the example programs. When you're ready to start using DUMB, see docs/howto.txt. Enjoy!
__________________
stabilmente instabile Ultima modifica di spk : 01-03-2007 alle 19:38. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
Edit:
avevo scritto una cavolata al punto di prima...
__________________
stabilmente instabile Ultima modifica di spk : 01-03-2007 alle 20:03. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
quindi da ancora errore ?
se si prova con gcc -v <poi tutto il resto> per attivare il verbose mode cosí vedi dove il gcc si va a prendere gli headers e libs varie EDIT: altra dritta: prova a mettere la lib col percorso completo: anziché -laldmb gli metti /usr/lib/libaldmb.a
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve Ultima modifica di trallallero : 02-03-2007 alle 09:10. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
guarda ho studiato un po il funzionamento del GCC e del linker, ho provato sia con i percorsi completi delle librerie sia spostando tutto l'occorrente manualmente nella cartella del progetto... risultati zero
ho cambiato libreria, ho scelto "fmod" e adesso senza alcun problema ho la musica nel mio giochino una domanda: vorrei compilare il mio programma integrandone tutte le librerie necessarie, ossia compilare staticamente ho letto di aggiungere -static al gcc, ma ho bisogno delle librerie che utilizzo in versione statica ( .a ) che non sempre vengono fornite assieme alla libreria stessa... nel mio caso la libreria allegroGL è stata installata nel file /usr/lib/libagl.so (libreria condivisa) quando cerco di compilare con -static mi dice: /usr/bin/ld: cannot find -lagl penso che cerchi /usr/lib/libagl.a cercando in rete ho letto che è molto facile convertire da una libreria statica a una dinamica, ma non ho trovato il contrario! ne sapete qualcosa?
__________________
stabilmente instabile |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
da me (ma ho Sun) cercherebbe prima /usr/lib/libagl.so e poi /usr/lib/libagl.a
Infatti da man ld: Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
Quote:
ma infatto io ho il .so ed io voglio il .a, perchè voglio compilare staticamente il percorso della libreria è esatto (ho creato anche un makefile apposito), è il .a che vuole ma non trova (perchè non c'è) volevo convertire il .sa in .a se possibile
__________________
stabilmente instabile Ultima modifica di spk : 02-03-2007 alle 17:17. |
|
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() scherzo, diciamo che potrebbe essere figo se aggiornassero il SO e qualche programma vetuserrimo. Di certo non é vero che non s'impianta mai. Se vuoi qualche info piú dettagliata chiedi pure Quote:
Mi ricordo che aveva un problema del genere una ragazza qui (non ricordo il nick) e mi sono fatto mandare tutto il sorgente. Le ho cambiato (se non ricordo male) proprio la compilazione della libreria da dinamica a .a e linkato l'eseguibile staticamente. O forse al contrario. Comunque poi andava Potrei aver detto una marea di cazzate, non mi prendo responsabilitá, sono svelgio dalle 3:30, sto aspettando che sto cazzo di clearcase mi mandi la richiesta in beta
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
||
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
penso tu abbia ragione
adesso mi chiede un'altro .a che non trovo,parlo della libreria fmod a dir la verità non trovo nemmeno i sorgenti in rete...sul sito ufficiale danno solo la libreria
__________________
stabilmente instabile |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
|
aaaaaaaaaaaahh!! ho scoperto perchè la debian è tanto osannata!
dentro i pacchetti *-dev ci stanno le librerie statiche!!!
__________________
stabilmente instabile |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
una domanda un pò out dal discorso...
a me servirebbe generare tramite il gcc un codice oggetto che contenga, oltre alle funzioni che ho scritto io nel file .c, anche le funzioni contenute nelle librerie da esso incluse (per esempio la printf nel caso di #include <stdio.h>) c'è un modo per fare questo? spero di essere stato chiaro... |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
EDIT: puoi provare a scaricarti la GNU C Library (gratis) http://sourceware.org/ml/libc-announ.../msg00000.html
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve Ultima modifica di trallallero : 03-03-2007 alle 16:45. |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Vorrei questo in quanto sto chiamando delle funzioni C all'interno di delphi, però al momento del link del progetto delphi mi dà errore in quanto non trova le funzioni del c scritte nel file .c appunto (tipo printf)
per chiarire...sto facendo questo... http://www.hwupgrade.it/forum/showthread.php?t=1420924 in quel caso non mi ha dato problemi perchè, nel file .c, ho fatto solo una return; però se inserisco una banale strcpy per esempio, non mi trova la funzione. Quindi per risolvere il problema, o faccio un file oggetto che contenga le librerie standard del c, oppure trovo un linker adeguato che in qualche modo mi trova le librerie. Ovviamente la seconda soluzione sarebbe molto meglio. C'è qualche linker adatto a questo? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
non saprei, mi spiace ma non ho nessun tipo di esperienza di delphi.
Prova ad aggiungere -lc ai parametri del gcc l'ho sparata così ... è la prima cosa che proverei Altrimenti potresti usare un'altra direttiva - {$L <libreria C>}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
provato...niente da fare...è più ostico del previsto far questa cosa.
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Se te la cavi in inglese prova qui www.delphiforums.com
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
quello posso farlo, il problema è che insieme devo linkare anche i file oggetto del delphi (lazarus);
Ora guardo il link, per l'inglese...ormai se non si sà questa lingua si è tagliati fuori per ricercare queste cose; se non si capisce si impara |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:47.





















