Risolto LINKING (g++): differenza tra -l e -l:

zouth

Utente Silver
16 Dicembre 2020
82
36
4
61
Ciao a tutti,

ho compilato un file .cpp in un file .so con il seguente comado:

g++ -fPIC -shared hello.cpp -o hello.so

Quando provo a linkare hello.so con un altro file .cpp usano il comando g++ file.cpp -l hello.so mi da errore.

Quando invece provo con g++ file.cpp -l:hello.so funziona.

Qualcuno conosce la differenza tra -l e -l:?
 
Ciao a tutti,

ho compilato un file .cpp in un file .so con il seguente comado:

g++ -fPIC -shared hello.cpp -o hello.so

Quando provo a linkare hello.so con un altro file .cpp usano il comando g++ file.cpp -l hello.so mi da errore.

Quando invece provo con g++ file.cpp -l:hello.so funziona.

Qualcuno conosce la differenza tra -l e -l:?
Credo nessuna, guardando tutti gli esempi online vedo che nessuno mette lo spazio tra -l e il nome della libreria, per cui presumo che il secondo comando funzioni solo perchè -l è attaccato al parametro (e ignori i due punti)... puoi fare una prova senza mettere i due punti ma senza nemmeno mettere lo spazio?
 
Ultima modifica:
Credo nessuna, guardando tutti gli esempi online vedo che nessuno mette lo spazio tra -l e il nome della libreria, per cui presumo che il secondo comando funzioni solo perchè -l è attaccato al parametro (e ignori i due punti)... puoi fare una prova senza mettere i due punti ma senza nemmeno mettere lo spazio?
Ho provato sia con e senza spazio, non cambia nulla
Messaggio unito automaticamente:

Ho risolto.

Per esempio: ho un file chiamato libtest.so che devo linkare con main.cpp

Posso fare in entrambi i modi riportati qui sotto:

g++ main.cpp -l test

g++ main.cpp -l:libtest.so
 
  • Mi piace
Reazioni: 0xbro
La sintassi con i duepunti si usa quando vuoi specificare il nome esatto del file, compreso di numero di versione ed estensione. La sintassi senza duepunti è generalmente preferibile perché meno specifica: se esiste una versione statica e una dinamica si prende automaticamente quella dinamica (amenoché non specifichi -static) e si prende automaticamente l'ultima versione disponibile.

Come hai notato le librerie hanno, per convenzione, il prefisso lib e l'estensione .a o .so e se non rispetti queste convenzioni il -l non funziona.
 
  • Mi piace
Reazioni: 0xbro