Я пытаюсь скомпилировать демо, в котором используется zlib, и я думаю, что я сделал правильный набор для LD_LIBRARY_PATH, но он не работает с флагом -lz, не могли бы вы помочь мне найти, в чем проблема ?LD_LIBRARY_PATH не работает
[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$
Проблема заключается в том, что если я использую -L
, чтобы заставить искать папку, она работает, если я ставлю эту папку в LD_LIBRARY_PATH, он не работает. Я уверен, что использовал export LD_LIBRARY_PATH
, но он все еще не работает.
Это раздражает, потому что, если мне нужно скомпилировать чужой код, который ему нужен, проще настроить переменную среды для поиска библиотек.
-------------- Обновление ------------
На другом сервере я попробовал это, и это работает плавно
[[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]$
Итак, моя конфигурация может быть правильной? Есть идеи? Я пробовал это на своих ноутбуках с Ubuntu 16.04 и Fedora 25, обновленный до стабильного 16 февраля 2017 года. Сервер, о котором я могу только сказать, не обновляется. Мне интересно, есть ли проблемы с новейшим gcc?
-------------- Обновление ------------
я могу знать, что вызывает проблему. Сообщение об ошибке: cannot find -lz
. Кажется, что обрабатывает -lz
как отдельный файл. Я нахожу, что есть и -z
флаг в использовании ld
, в то время как он может конвертировать -lz
в нечто подобное и найти, что у нас нет параметра для обоих флагов, а затем объединить их как один параметр файла? Не совсем уверен в моем умозаключении, но кто-нибудь знает, как справиться с этим делом?
-------------- Обновление ------------
Полный Makefile
all:kseq.h kseq_test.c
$(CC) -g -O2 kseq_test.c -o kseq_test -lz
clean:
rm -f *.o
------ -------- Обновление ------------
3-й раздел может быть недействительным, потому что после добавления -v к cc я нашел -lz успешно передается компоновщику
Просьба показать нам соответствующую часть файла Makefile, типичную для линий, ссылающихся на компоновщик. – alk