2016-07-03 7 views
1

Meine LIBRARY_PATH-Variable wird exportiert, aber ich muss die Option -L weiterhin an gcc übergeben, um eine Verknüpfung zu meiner Bibliothek herzustellen.Umgebungsvariable LIBRARY_PATH wird nicht verwendet/wird mit gcc gelesen

Wenn ich die GCC-Dokumentation korrekt 3.20 Environment Variables Affecting GCC verstehe, sollte die Umgebungsvariable LIBRARY_PATH so aussehen, dass ich nur die Option -l angeben muss.

Als ich

gcc -Wall cog.c -L$HOME/lib -lutil 

das Programm ausgeführt wird zusammengestellt, und ich erhalte eine a.out, wie erwartet.

Wenn ich

gcc -Wall cog.c -lutil 

laufen bekomme ich einen nicht definierten Referenzfehler.

Soweit ich das beurteilen kann, habe ich die Umgebungsvariable ordnungsgemäß exportiert.

cassiopeia~> export LIBRARY_PATH=$HOME/lib 
cassiopeia~> ls $LIBRARY_PATH 
libutil.a 

Irgendwelche Hinweise?

Für was es wert ist, verwende ich Fedora 23 64bit und gcc Version 5.3.1 20160406 (Red Hat 5.3.1-6).

+0

Bitte versuchen Sie LD_LIBRARY_PATH – zgrw

+4

@zgrw 'LD_LIBRARY_PATH' wird ausschließlich vom dynamischen Loader' ld.so' verwendet, um dynamische Bibliotheken zur Laufzeit zu finden. Es wirkt sich nicht auf den Compiler oder den Linker aus. – tofro

Antwort

2

Ihre Distribution ist wahrscheinlich multilibfähig. Wenn dies der Fall ist, werden alle Pfadzeichenfolgen für Bibliotheken mit der Architektur für diese Maschine (normalerweise 32-Bit oder 64-Bit) erweitert. Also, wenn Sie angeben

$ HOME/lib

als Suchpfad, multilib könnte es zu

erweitern

$ HOME/lib/x86_64-linux/4.6

oder

$ HOME/lib/x86_32-linux/4,6

Sie können prüfen, ob dies der Fall ist gcc einmal durch den Aufruf mit

gcc --print-search-dirs 

Dies macht gcc reagiert mit allen Suchpfaden im Einsatz für config und Bibliotheken.

+0

Möglicherweise gibt es etwas, aber: Ich habe ein multilib-fähiges System und Einstellung LIBRARY_PATH gcc sagen, wo Bibliotheken zu finden scheint gut zu funktionieren, keine $ (arch) Unterverzeichnisse erforderlich. – davmac

+0

@davmac Es hängt eigentlich davon ab, wie * multilib * konfiguriert ist - Meine persönliche Meinung ist: Es sollte keinen Suchpfad berühren, der mit '-L' angegeben ist. Bei einigen Distributionen ist dies jedoch der Fall. – tofro