红联Linux门户
Linux帮助

查libevent不能编译出动态库问题

发布时间:2016-06-11 09:34:40来源:linux网站作者:临峰不畏

从事嵌入式Linux上的软件开发,其中用到了很多库。发现这些库都是静态链接的。如果有多个程序都要用到这个库,而且这个库又比较大的时候。这将是一个莫大的空间浪费。

对比了一下本地编译与交叉编译下的日志输出,发现有以下比较可疑的信息:

查libevent不能编译出动态库问题

上面左边76,77行,不能支持shared libraries。

打开 ./configure,找到对应的输出语句:

查libevent不能编译出动态库问题

能否支持,是由 can_build_shared 这个变量决定的。

而 can_build_shared 在这里有修改:

查libevent不能编译出动态库问题

去 confilg.log 中搜 11262 行的输出结果:

查libevent不能编译出动态库问题

结果可以看出 dynamic_linker 的值是 “GNU/Linux ld.so”,不是 "no",所以不是这里影响了 can_build_shared 变量。

查得另一处影响的变量:

查libevent不能编译出动态库问题

去 config.log 查得 ld_shlibs 的值为 no:

查libevent不能编译出动态库问题


那为什么 ./configure 认为 rsdk-linux-gcc 不支持 shared library 呢?它的判断标准是什么?

翻了好几页,这 ./configure 真不是人看的,没有对缩进,而且好深的case嵌套。脑空量溢出了。

大概可以分析出跟 host   有关系,./configue 在分析是什么系统,根据系统来判断 ld_shlibs 的值。

如果是这样,很可能是我在 Makefile 中:

查libevent不能编译出动态库问题

./configure --host=mips-linux 所致?将 "mips-linux" 改成 "linux" 再试试。

通过打调试信息,得知是在这里设置的 ld_shlibs 为 no 的:

查libevent不能编译出动态库问题

查libevent不能编译出动态库问题

与这个case相关的代码好大,好难看出到底是什么条件了。查得与 host_os 变量相关。

在调试信息中打印 host_os 变量的值,为 "elf" 。为什么是这个?而 host_os 在这里赋值:

查libevent不能编译出动态库问题

从 config.log 中得知 ac_cv_host = mips-unkonwn-elf 。

ac_cv_host 来源:

查libevent不能编译出动态库问题

这个由 config.sub 与 host_alias 所得。而 host_alias 来自于:

查libevent不能编译出动态库问题

可以从 L984 得知,host_alias 来自于我们 ./configure 时传的 --host=mips 所得。


理一下思路:

我们转入了一个 --host=mips-linux,configure 执行 sh config.sub mips-linux,返回的结果是 "mips-unkonwn-elf",host_os 从中提取出 "elf",然后就不对了。

那 --host=?? 得看 config.sub 如何转换。


本文永久更新地址:http://www.linuxdiyf.com/linux/21413.html