Come collegarsi usando GCC senza -l né percorso hardcoding per una libreria che non segue la convenzione di denominazione libNAME.so?
-
03-07-2019 - |
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?
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