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

博主从事嵌入式Linux上的软件开发,其中用到了不少库。博主发现这些库都是静态连接的。若是有多个程序都要用到这个库,并且这个库又比较大的时候。这将是一个莫大的空间浪费。linux

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

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

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

可否支持,是由 can_build_shared 这个变量决定的。日志

can_build_shared 在这里有修改:ip

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

结果能够看出 dynamic_linker 的值是 “GNU/Linux ld.so”,不是 "no",因此不是这里影响了 can_build_shared 变量。编译

查得另外一处影响的变量:变量

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

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

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

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

若是是这样,极可能是我在 Makefile 中:

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

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

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

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

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

ac_cv_host 来源:

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

能够从 L984 得知,host_alias 来自于咱们 ./configure 时传的 --host=mips 所得。

理一下思路:

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

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

相关文章
相关标签/搜索