/usr/bin/ld: errno: TLS definition in /lib/i386-linux-gnu

Linux 2015年08月01日 ,

Linux返回上一次的目录
明晃晃的错误啊!

/usr/bin/ld: errno: TLS definition in /lib/i386-Linux-gnu/libc.so.6 section .tbss mismatches non-TLS reference in ./XXX

今天准备研究下zlib的源码,为了快速入门,就下载了github上面的最早的版本zlib-0.8,早期的版本有bug,但毕竟功能少。

编译

直接编译测试,看看是怎么玩的

$ make test

错误如下:

cc -O -o example example.o -L. -lgz
/usr/bin/ld: errno: TLS definition in /lib/i386-linux-gnu/libc.so.6 section .tbss mismatches non-TLS reference in ./libgz.a(gzio.o)
/lib/i386-linux-gnu/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status

问题分析

首先想到的是不是源码有问题呢?这样可能性太低了。

其次,这个版本发布的时候是1995年,会不会是当前的系统或者编译器做了改动,导致的呢?枫竹梦的系统是Ubuntu 12.04,编译器为GCC 4.4.7。20年的间隔,真的有点拿不准。

问题解决

仔细看看出错的原因,其实是链接时并没有找到errno这个变量的定义,那么,可以在编译时指定包含的头文件,命令如下:

-include /usr/include/errno.h

为了方便,直接修改Makefile文件,如下:

CC=cc -include /usr/include/errno.h

一切OK!

转载请注明,本文地址:http://furzoom.com/zlib-errno-error/ ‎

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《/usr/bin/ld: errno: TLS definition in /lib/i386-linux-gnu》
日志链接:http://furzoom.com/zlib-errno-error/
博客名称:枫竹梦

【上一篇】
【下一篇】

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部