2009-08-20 4 views
6

Ich muss meinen Code mit einer gemeinsamen Bibliothek ohne das lib-Präfix verknüpfen. (Sagen wir, foo.so) Das erste Problem ist, dass die Option -l die Datei nicht findet. Also habe ich versucht, diese Datei direkt einschließlich der letzten Übersetzung wie folgt aus:Wie verlinke ich zu einer shared library ohne lib * Präfix in einem anderen Verzeichnis?

gcc ein ao /PATH/TO/FOO/foo.so

Aber in diesem Fall ist ein hart verknüpft als ein foo.so absoluter Pfad wie in „ldd a“ gesehen:

/PATH/TO/FOO/foo.so

im letzten Einsatz beiden Dateien im selben Ordner am Ende als würden, so sollte diese normale Verbindung sein, nicht der absolute Weg. Wie kann ich das machen?

+0

Mögliche Duplikat [So verknüpfen GCC ohne -l noch Hardcoding-Pfad für eine Bibliothek, die nicht der Namenskonvention libNAME.so folgt?] (http://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor-hardcoding-path- for-a-library-das-tut-nicht –

Antwort

6

-Wl, -Rrpath ,. -> aktuelles Verzeichnis zum Suchen von Lib-Dateien verwenden. (selbst wenn nicht in Kompilierung gefunden, ok zur Laufzeit) anstelle von -llibrary -> library.so verwenden.

Dies scheint richtig zu funktionieren. Hoffe jemand findet das nützlich.

12

eine ELF-Plattform Unter der Annahme, wenn Sie foo.so wieder aufbauen können:
- die beste Lösung ist einfach, es zu benennen libfoo.so
- die zweitbeste Lösung ist SONAME drauf zu setzen:

gcc -Wl,-soname,foo.so -o foo.so foo.o 

, wenn Sie später Link mit:

gcc -o a.out a.o /path/to/foo.so 

nur die SONAME wird als Abhängigkeit aufgezeichnet werden, keine vollständige /path/to/foo.so.

Wenn Sie nicht foo.so wieder aufbauen können, das dann tun:

rm -f foo.so && ln -s /path/to/foo.so foo.so && 
    gcc -o a.out a.o ./foo.so && rm -f foo.so 
Verwandte Themen