当我在powerpc板(ap。)上运行snmpd守护程序时,出现此错误:
R_PPC_REL24: Compile shared libraries with -fPIC!
/usr/local/sbin/snmpd: symbol 'strlen': can't handle reloc type 0xa in lib
/lib/libnetsnmpmibs.so.15'
sh: you need to specify whom to kill
我在Google上搜索,发现
-fPIC
标志在编译时应该在那里,并且它的位置应该在gcc之后,因此我相应地更改了Makefie。这是我的makefile的片段:$(Q)cd $(PROJECT_BUILD_DIR)/$(NET_SNMP_PKG) && ./configure --target=$(TARGET_TRIPLET) \
--host=$(HOST_TRIPLET) \
--build=$(BUILD_TRIPLET) \
--with-cc="$(CR_COMPLR)gcc -fPIC" \`
--with-cflags="-Os -I$(RFS)/lib -I$(NMS_DIR)/include" \`
--with-linkcc="$(CR_COMPLR)gcc -fPIC" \`
如您所见,我在gcc之后嵌入了
-fPIC
,但仍然出现错误。我已经为powerpc平台进行了交叉编译,并且正在使用最新的buildroot-2011.11和gcc 4.3.6和uClibc版本0.9.32。错误原因可能是什么?附言当我执行
nm libnetsnmpmibs.so.15 | grep strlen
时,我得到的输出为U strlen
。这是否意味着它是 undefined 的? 最佳答案
我有问题。实际上,最主要的是仅使用-fPIC
进行编译。
在我的情况下,我使用snmp
正确编译了-fPIC
库,但是某些功能依赖于其他软件包的库(nms
)。在进行固件开发时,涉及20多个软件包。因此,我使用nms
编译了-fPIC
库,并解决了错误。
关于shared-libraries - 错误使用-fPIC编译共享库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8445736/