当我在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/

10-12 20:48