首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么GCC不链接到libz呢?

为什么GCC不链接到libz呢?
EN

Stack Overflow用户
提问于 2015-01-21 15:25:30
回答 1查看 1.5K关注 0票数 0

gcc -pthread -fno-严格-混叠-g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict原型-fPIC -i/home/流浪者/python/include/python2.7 -c外部/肯塔基州inc/wWigIO/wigIO.c -o -o -w -shared -fPIC -p -inc/肯塔基inc/inc.

然后:

gcc build/temp.linux-i686-2.7/external/KentLib/wWigIO/wWigIO.o -pthread -shared -o build/lib.linux-i 686-2.7/wwigIO.so -DMACHTYPE_x86_64 -lz -lm external/肯塔基lib/lib/jkweb.a

(对于这些命令的杂乱无章,我很抱歉,我想逐字复制它们,以免遗漏重要的细节)

然后,我查看符号,并注意到没有定义compress

代码语言:javascript
复制
$ nm build/lib.linux-i686-2.7/wWigIO.so | grep compress
         U compress
0002486d t getDecompressor
00024b28 T lineFileDecompress
00024c0f T lineFileDecompressFd
00024c8b T lineFileDecompressMem
         U uncompress
00037cd2 T zUncompress

它似乎没有链接到libmlibz

代码语言:javascript
复制
$ ldd build/lib.linux-i686-2.7/wWigIO.so
    linux-gate.so.1 =>  (0xb76e2000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7668000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74be000)
    /lib/ld-linux.so.2 (0xb76e3000)

我知道libz已经安装,它在搜索路径中:

代码语言:javascript
复制
$ sudo cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
$ sudo cat /etc/ld.so.conf.d/*.conf
# Multiarch support
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
# libc default configuration
/usr/local/lib

libz在这些地点:

代码语言:javascript
复制
$ locate libz
/lib/i386-linux-gnu/libz.so.1
/lib/i386-linux-gnu/libz.so.1.2.3.4
/usr/lib/i386-linux-gnu/libz.a
/usr/lib/i386-linux-gnu/libz.so

我可以看到在libz.so中定义的符号

代码语言:javascript
复制
$ nm -D /usr/lib/i386-linux-gnu/libz.so | grep compress
00001d60 T compress
00001c70 T compress2
00001da0 T compressBound
00003d20 T uncompress

我唯一能做到这一点的方法就是将gcc命令改为这个(添加了粗体部分):

gcc build/temp.linux-i686-2.7/external/KentLib/wWigIO/wWigIO.o -pthread -shared -o build/lib.linux-i 686-2.7/wWigIO.so -DMACHTYPE_x86_64 -lz -lm external/肯塔基lib/lib/jkweb.a /usr/lib/i386-linux-gnu/libz.a

这对我来说毫无意义。为什么libz不链接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 13:54:42

我想出了一个解决办法。

如果我设置了LDFLAGS='-Wl,--no-as-needed -lz',那么它确实会链接到libz,并且编译后的共享库现在不会得到未定义的符号错误。

但是,我仍然不明白为什么它不通过提供-lz标志来链接到libz。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28070799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档