Wie verknüpfen GCC ohne -l noch für eine Bibliothek hartzucodieren Pfad, der nicht der libNAME.so Namenskonvention folgt?

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

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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top