Ich bewerte C- und C++ - Dateien für eine Klasse und diese Zuweisung verwendet die GSL-Bibliothek. Da ich keine root-Berechtigung auf meinem Computer habe, ist meine GSL-Bibliothek in meinem Home-Verzeichnis installiert, und ich muss Compilern und Linkern mitteilen, wo ich sie finden kann.Telling ld wo über eine Umgebungsvariable nach Verzeichnissen gesucht wird
Das ist kein Problem, wenn ich selbst ein Programm schreibe, weil ich nur die entsprechenden -L und -I Flags zu gcc hinzufügen.
Aber wenn ich Studentendaten kompiliere, möchte ich nicht jedes ihrer Makefiles bearbeiten. Stattdessen möchte ich die entsprechenden Verzeichnisse in eine Umgebungsvariable einfügen, so dass es nahtlos passiert.
Zu diesem Zweck habe ich die folgenden Variablen mit der Bibliothek exportiert oder umfassen Standorte: C_INCLUDE_PATH CPLUS_INCLUDE_PATH, LIBRARY_PATH und LD_LIBRARY_PATH
Aber wenn ich kompilieren eines Schülers Projekt, mit
gcc -Wall -o MC_thread MC_thread.c -lgsl -lgslcblas -lpthread -lm
Ich erhalte den folgenden Fehler:
/usr/bin/ld: cannot find -lgsl
collect2: ld returned 1 exit status
make: *** [all] Error 1
Ich benutze gcc v 4.1.2. Ich bekomme den Fehler eigentlich nicht, wenn ich gcc v 4.4 benutze, aber ich habe keine Ahnung warum. Mein Linker ist:
ld -V
GNU ld version 2.17.50.0.6-12.el5 20061020.
Versuchen Sie Mann ld und Mann ld.so für Umwelt vars sie benutzen. LD_LIBRARY_PATH könnte funktionieren. – Eugene
Ich denke LD_LIBRARY_PATH wird nur von ld.so, nicht von ld verwendet. Seit Dies ist ein Fehler bei der Kompilierung, kein Laufzeitfehler, würde ich Fokus auf warum LIBRARY_PATH nicht funktioniert. Zwei Dinge, die ich verifizieren würde, hat die Bibliotheksdatei den richtigen Namen und ist LIBRARY_PATH tatsächlich in der GCC-Ausführungsumgebung definiert? –
Versuchen Sie, gcc mit der Option '-v' auszuführen, und senden Sie die vollständige Invokation ld von der Ausgabe. –