pisen-奇迹 发表于 2014-03-21 08:58

静态库与动态库

交叉编译glibc时出现下面错误:
/opt/222/cross/embedded-toolchains/tool-chains/lib/gcc/mips-linux/4.3.3/../../../../mips-linux/bin/ld: cannot find -lgcc_eh
collect2: ld 返回 1
make: *** 错误 1
make: Leaving directory `/opt/222/cross/embedded-toolchains/src-dir/glibc-2.9/iconv'
make: *** 错误 2
make: Leaving directory `/opt/222/cross/embedded-toolchains/src-dir/glibc-2.9'
make: *** 错误 2
这里是缺少静态链接库,还是动态链接库,有点糊涂了,问题该怎样解决,希望得到大虾的指点!

jeppeter 发表于 2014-03-21 10:21

回复 1# pisen-奇迹


    在默认情况下是动态库。但要看你的命令行是什么,如果有-static 那就是静态的了。或者没有找到动态库,也会去查找静态库的。

pisen-奇迹 发表于 2014-03-21 12:15

回复 2# jeppeter

书上不是说编译的时候不会链接到动态库的么?我有点晕了。。



   

arm-linux-gcc 发表于 2014-03-21 19:26

本帖最后由 arm-linux-gcc 于 2014-03-22 15:46 编辑

你为毛要自己去编译glibc?
直接用buildroot来制作一个全套的toolchain多方便

Hugo801122 发表于 2014-03-25 11:49

这个要等大侠出来帮你了。

水手辛巴 发表于 2014-03-25 19:12

回复 1# pisen-奇迹

只是连接的时候,找不到libgcc_eh这个库,是不是静态库或动态库并没有关系。如果是动态库,在应用执行时会加载检查符号的。但在编译时,应该是无论同名的静态库或动态库,都没找到。
   

xhbdahai 发表于 2014-03-27 12:23

这是一个静态库,全名为libgcc_eh.a,属于gcc stub lib一部分,只有静态编译时候才需要。
在使用预编译的gcc在编译glibc时候,此错误可以忽落,因为实质上glibc并没有使用到libgcc_eh里面的实际内容,是gcc找不到这个库。解决办法:
1. 重新编译下gcc让它产生这个库,(真正正确的libgcc_eh是在完成glibc编译后,第二次编译gcc时产生的)
2. 直接将libgcc.a copy一下,将copy后libgcc.a改名字为libgcc_eh.a就可以了,不会影响你的编译。因为第二次编译gcc这个库会被新产生的正确的libgcc_eh所覆盖
页: [1]
查看完整版本: 静态库与动态库