Wie verknüpfen GCC ohne -l noch für eine Bibliothek hartzucodieren Pfad, der nicht der libNAME.so Namenskonvention folgt?
-
03-07-2019 - |
Frage
Ich habe eine gemeinsame Bibliothek, die ich wünschte, eine ausführbare Datei gegen die Verwendung von GCC zu verknüpfen. Die gemeinsam genutzte Bibliothek hat einen Nicht-Standard-Namen nicht von der Form libNAME.so, also kann ich nicht die übliche Option -l verwenden. (Es kommt auch eine Python-Erweiterung zu sein, und so hat keinen ‚lib‘ Präfix).
Ich kann den Weg in die Bibliothek-Datei direkt auf die Link-Befehlszeile zu übergeben, aber dies bewirkt, dass der Bibliothekspfad in die ausführbaren Datei fest einprogrammiert werden.
Zum Beispiel:
g++ -o build/bin/myapp build/bin/_mylib.so
Gibt es eine Möglichkeit, um diese Bibliothek zu verbinden, ohne den Pfad verursacht in der ausführbaren Datei fest einprogrammiert werden?
Lösung
Es gibt den „:“ Präfix, das Sie verschiedene Namen Ihre Bibliotheken geben kann. Wenn Sie
g++ -o build/bin/myapp -l:_mylib.so other_source_files
sollte Ihren Weg für den _mylib.so suchen.
Andere Tipps
Wenn Sie die gemeinsam genutzte Bibliothek in das Arbeitsverzeichnis kopiert werden können, wenn g ++ dann aufgerufen wird, dies sollte funktionieren:
g++ -o build/bin/myapp _mylib.so other_source_files
Wenn Sie auf Unix oder Linux sind denke ich, eine symbolische Verbindung zur Bibliothek im Verzeichnis erstellen können Sie die Bibliothek wollen.
Zum Beispiel:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so
Sie könnten dann verwenden -l_mylib
http://en.wikipedia.org/wiki/Symbolic_link