it-swarm.com.de

gcc -/usr/bin/ld Fehler: <library> kann in/usr/local/lib nicht gefunden werden, obwohl ldconfig es auflistet und der Pfad zu ld.so.conf hinzugefügt wird

Ich versuche, einen C++ - Code zu kompilieren. Dazu verwende ich eine Bibliothek, die ich auch manuell kompiliert und in/usr/local/lib installiert habe

Die Kompilierung der Software schlägt beim Verknüpfungsschritt fehl:

 /usr/bin/ld: error: cannot find -lcppdb

es scheint, dass g ++ nicht standardmäßig in /usr/local/lib durchsucht wird, genauso wie clang++

 g++ -print-search-dirs # does not show /usr/local/lib

tatsache ist jedoch, dass /usr/local/lib in meinem /etc/ld.so.conf ist, und ich habe ldconfig als root ausgeführt, und tatsächlich zeigt ldconfig -p | grep cppdb mir 

libcppdb_sqlite3.so.0 (libc6) => /usr/local/lib/libcppdb_sqlite3.so.0
libcppdb_sqlite3.so (libc6) => /usr/local/lib/libcppdb_sqlite3.so
libcppdb.so.0 (libc6) => /usr/local/lib/libcppdb.so.0
libcppdb.so (libc6) => /usr/local/lib/libcppdb.so

das Hinzufügen der Option -L/usr/local/lib löst natürlich das Problem, das Ziel ist jedoch die Verwendung von Konfigurationsdateien

13
allan.simon

ld, der Linker, verwendet dafür keine externen Konfigurationsdateien. ldconfig ist für den Loader, ld.so. Erstellen Sie ein Makefile, wenn Sie irgendwo Werte für den Linker festlegen möchten.

Das Angeben von -L-Schaltern in Ihrem Makefile ist eine übliche Methode, um dieses Problem zu beheben. Sie können jedoch systemweite Änderungen vornehmen, indem Sie die Standard-GCC spec-Datei ändern, mit der zusätzliche Optionen angegeben werden können, die an das übergeben werden sollen Compiler, Linker usw. Ich habe dies in der Vergangenheit getan, um Ihr spezifisches Problem anzusprechen, aber es ist lange her, daher kann ich Ihnen leider kein spezifisches Beispiel geben.

1
jjlin

1, Sie können das Linker-Skript verwenden und '/ usr/local/lib' zu search_dir . Hinzufügen. Weitere Informationen finden Sie unter Linker_Scripts .

2, fügen Sie/usr/local/lib zur GCC_EXEC_PREFIX-Shell-Umgebung hinzu, und versuchen Sie es erneut .. _.

nur vorschlag, hat es noch nicht versucht.

0
liuyang1