我想编译一个使用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在2017年2月16日更新为稳定版。我只能说它不是最新更新的服务器。我想知道最新的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
------ --------更新------------
第三节可能不是一个有效的解释,因为在追加-v到cc后,我发现-lz已成功传递给链接器
请向我们展示Makefile的相关部分,这些部分通常是调用链接器的那些行。 – alk