Ich versuche, eine Demo zu kompilieren, die zlib verwendet, und ich denke, ich habe richtig für LD_LIBRARY_PATH eingerichtet, aber es funktioniert nicht mit -lz Flagge, würden Sie mir bitte helfen, das Problem zu finden ?LD_LIBRARY_PATH funktioniert nicht
[email protected]:kseq$ echo $LD_LIBRARY_PATH
/home/lisanhu/mine/repos/zlib/output/lib
[email protected]:kseq$ make
gcc -g -O2 kseq_test.c -o kseq_test -lz
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
Makefile:3: recipe for target 'all' failed
make: *** [all] Error 1
[email protected]:kseq$ gcc -static -o kseq_test kseq_test.o -lz -L/home/lisanhu/mine/repos/zlib/output/lib
[email protected]:kseq$
Das Problem ist, dass, wenn ich -L
verwenden zu zwingen, den Ordner suchen, es funktioniert, wenn ich diesen Ordner in LD_LIBRARY_PATH setzen, funktioniert es nicht. Ich bin mir ziemlich sicher, dass ich export LD_LIBRARY_PATH
verwendet habe, aber es funktioniert immer noch nicht.
Das ist ärgerlich, denn wenn ich den Code von jemand anderem kompilieren muss, ist es einfacher, eine Umgebungsvariable einzurichten, um nach den Bibliotheken zu suchen.
-------------- aktualisieren ------------
auf einem anderen Server ich das ausprobiert und es funktioniert reibungslos
[[email protected] tmp]$ export LD_LIBRARY_PATH=/home/1677/mine/repos/zlib/zlib-1.2.8
[[email protected] tmp]$ ls
gmon.out kseq.h kseq.tar kseq_test kseq_test.c Makefile
[[email protected] tmp]$ make
cc -g -O2 kseq_test.c -o kseq_test -lz
[[email protected] tmp]$ ldd kseq_test
linux-vdso.so.1 => (0x00007fffb01a6000)
libz.so.1 => /home/1677/mine/repos/zlib/zlib-1.2.8/libz.so.1 (0x00007f9556c83000)
libc.so.6 => /lib64/libc.so.6 (0x00000031fa400000)
/lib64/ld-linux-x86-64.so.2 (0x00000031fa000000)
[[email protected] tmp]$
Also kann meine Konfiguration korrekt sein? Irgendwelche Ideen? Ich habe es auf meinen Laptops mit Ubuntu 16.04 und Fedora 25 versucht, am 16. Februar 2017 auf stabil aktualisiert. Der Server kann ich nur sagen, es ist nicht neu aktualisiert. Ich frage mich, ob es ein Problem mit dem neuesten gcc gibt?
-------------- aktualisieren ------------
ich kann wissen, was das Problem verursacht. Die Fehlermeldung lautet cannot find -lz
. Es scheint -lz
als eine einzige Datei zu behandeln. Ich finde, es gibt beide -l
und -z
Flag in der Verwendung von ld
, während es -lz
in etwas wie das konvertieren kann und wir haben keinen Parameter für beide Flags und dann kombinieren sie zusammen als eine einzige Dateiparameter? Nicht sicher über meine Schlussfolgerung, aber hat jemand eine Idee, wie man mit diesem Fall umgehen soll?
-------------- aktualisieren ------------
Vollmakefile
all:kseq.h kseq_test.c
$(CC) -g -O2 kseq_test.c -o kseq_test -lz
clean:
rm -f *.o
------ -------- Update ------------
Der 3. Abschnitt möglicherweise keine gültige Erklärung, weil nach dem Hinzufügen -V zu cc, ich habe gefunden, -lz ist erfolgreich an den Linker übergeben
Bitte zeigen Sie uns den relevanten Teil des Makefiles, typisch jene Zeilen, die den Linker aufrufen. – alk