Clang linker sieht nicht in LD_LIBRARY_PATH
Ich versuche, zu bauen und zu verknüpfen C++, cmake-basierten Projekt mit clang (3.0). Dieses Projekt verbindet mehrere Bibliotheken installiert sind, in einem benutzerdefinierten Verzeichnis /mein/dir/. Dieses Verzeichnis ist in der LD_LIBRARY_PATH und Umgebungsvariablen LIBRARY_PATH. Projekt erstellt und links fein mit g++.
Link-Befehl generiert und ausgeführt von cmake wie folgt aussieht:
/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib
ld meckert dann mit der folgenden Meldung:
/usr/bin/ld: cannot find -lmylib
Link-Befehl oben läuft einwandfrei, wenn ich manuell hinzufügen -L/my/dir/
. Gibt es eine Möglichkeit, den link ohne die Angabe der -L
Flagge?
LD_LIBRARY_PATH
ist für das laden von Bibliotheken beim Systemstart nicht für die Lösung link Abhängigkeiten. Vielleicht möchten Sie verwendenLDFLAGS
?- Interessant. Ich verwende g++ und clang++ austauschbar mit CMake, aber hatte nie ein ähnliches problem. Ich benutze einfach die
link_directories()
makro zu definieren, die Bibliothek Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
$LD_LIBRARY_PATH
Umgebungsvariable (und die verschiedenen alternativen, die auf anderen UNIX-basierten Plattformen) verwendet wird, bei Laufzeit, nicht link mal, zu finden in Bibliotheken.Mit
-L
ist der richtige Ansatz und nicht vermieden werden können.Hinweis: Eine bessere Lösung unter Linux (die Sie nicht angeben, Ihre Plattform, so dass ich vermute), ist Sie korrekt konfigurieren Sie eine Datei in
/etc/ld.so.conf.d/
und vermeiden Sie die Verwendung$LD_LIBRARY_PATH
insgesamt.LIBRARY_PATH
. Was ist das Problem mit-L
?/etc/ld.so.conf.d/
ist Laufzeit nur gut, ich habe erwähnt, wie es ist ein besserer Ansatz als die Verwendung$LD_LIBRARY_PATH
; Sie wirken sich nicht auf Sie bauen. Warum nicht fügen Sie eine benutzerdefinierte variable für den cmake-config, die jeder von Ihnen kann eingestellt werden, geben Sie zusätzliche Bibliotheken während verknüpfen (wenn es nicht gesetzt wird, es tut nichts und hat keine Auswirkungen auf Ihre Kollegen)