Come collegarsi usando GCC senza -l né percorso hardcoding per una libreria che non segue la convenzione di denominazione libNAME.so?

StackOverflow https://stackoverflow.com/questions/207069

Domanda

Ho una libreria condivisa che desidero collegare un eseguibile contro l'utilizzo di GCC. La libreria condivisa ha un nome non standard non nel formato libNAME.so, quindi non posso usare la solita opzione -l. (Capita anche di essere un'estensione Python, e quindi non ha un prefisso 'lib'.)

Sono in grado di passare il percorso al file della libreria direttamente alla riga di comando del collegamento, ma questo fa sì che il percorso della libreria sia codificato nel file eseguibile.

Ad esempio:

g++ -o build/bin/myapp build/bin/_mylib.so

Esiste un modo per collegarsi a questa libreria senza far sì che il percorso sia codificato nel file eseguibile?

È stato utile?

Soluzione

C'è il ": " prefisso che ti consente di assegnare nomi diversi alle tue librerie. Se usi

g++ -o build/bin/myapp -l:_mylib.so other_source_files

dovrebbe cercare _mylib.so nel tuo percorso

Altri suggerimenti

Se puoi copiare la libreria condivisa nella directory di lavoro quando viene invocato g ++, questo dovrebbe funzionare:

g++ -o build/bin/myapp _mylib.so other_source_files

Se sei su Unix o Linux, penso che puoi creare un collegamento simbolico alla libreria nella directory in cui desideri la libreria.

Ad esempio:
ln -s build / bin / _mylib.so build / bin / lib_mylib.so

È quindi possibile utilizzare -l_mylib

http://en.wikipedia.org/wiki/Symbolic_link

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top