Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-03-2007, 13:18   #1
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 13:54   #2
andbin
Senior Member
 
L'Avatar di andbin
 
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 19:07   #3
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 19:32   #4
spk
Senior Member
 
L'Avatar di spk
 
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.
spk è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2007, 19:59   #5
spk
Senior Member
 
L'Avatar di spk
 
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.
spk è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 09:05   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da spk Guarda i messaggi
Edit:

avevo scritto una cavolata

al punto di prima...
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.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 16:10   #7
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 16:41   #8
trallallero
Senior Member
 
L'Avatar di trallallero
 
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:
On systems which support shared libraries, ld may also search for
libraries with extensions other than ".a". Specifically, on ELF
and SunOS systems, ld will search a directory for a library with an
extension of ".so" before searching for one with an extension of
".a". By convention, a ".so" extension indicates a shared library.
Comunque devi passare -L<direttorio> se la lib si trova in un direttorio non standard
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 17:13   #9
spk
Senior Member
 
L'Avatar di spk
 
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
Quote:
Originariamente inviato da trallallero Guarda i messaggi
da me (ma ho Sun) cercherebbe prima /usr/lib/libagl.so e poi /usr/lib/libagl.a
Infatti da man ld:


Comunque devi passare -L<direttorio> se la lib si trova in un direttorio non standard
SunOS? che figo!!!! com'è?

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.
spk è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 17:23   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da spk
SunOS? che figo!!!! com'è?
figo ?
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:
Originariamente inviato da spk
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
se la libreria é compilata in un certo modo non é che puoi snaturarla. Se hai un .so é dinamica e non puoi linkarla staticamente, dovresti avere il sorgente e ricompilarla.
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 17:42   #11
spk
Senior Member
 
L'Avatar di spk
 
Iscritto dal: Jul 2002
Città: Hampstead, London
Messaggi: 2449
penso tu abbia ragione ho spulciato fra i sorgenti di allegroGL e sono riuscito a creare il .a che mi serve

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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 17:59   #12
spk
Senior Member
 
L'Avatar di spk
 
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
spk è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2007, 20:22   #13
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da spk Guarda i messaggi
aaaaaaaaaaaahh!! ho scoperto perchè la debian è tanto osannata!
dentro i pacchetti *-dev ci stanno le librerie statiche!!!

non ho capito
__________________
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 15:17   #14
nico88desmo
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...
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 16:36   #15
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da nico88desmo Guarda i messaggi
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...
cioè tu vorresti creare un .o che contenga anche le librerie standard del C ? se è così temo che non si possa perchè sono dinamiche. Ma potre sbagliarmi, non ci ho mai pensato e provato

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.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 17:00   #16
nico88desmo
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?
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 17:29   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 17:46   #18
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
provato...niente da fare...è più ostico del previsto far questa cosa.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2007, 18:32   #19
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da nico88desmo Guarda i messaggi
provato...niente da fare...è più ostico del previsto far questa cosa.
scusa ma tu puoi linkare un tuo .o fatto in C e non puoi linkare una libreria dinamica fatta in C ?
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2007, 10:51   #20
nico88desmo
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 ... quindi mi tocca imparare
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
Apple avrebbe fissato un target di vendi...
Ultimi giorni per sfruttare le Offerte d...
I migliori smartphone in offerta ora su ...
Le migliori TV delle Offerte di Primaver...
Uno dei robot più avanzati del 2025 crol...
Robot aspirapolvere con stazione automat...
Il nuovo top di gamma compatto di OPPO n...
Nilox aggiorna la sua gamma di fat e-bik...
Meta valuta tagli fino al 20% della forz...
MacBook Neo sorprende iFixit: 'Non vedev...
Venus Optics presenta due nuovi obiettiv...
AMD pubblica una guida per eseguire Open...
Tomb Raider I-III Remastered arriva su A...
X fa marcia indietro: si adeguerà...
Framework e la crisi delle memorie: terz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v