当我在powerpc board(a.p。)上运行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版本。可能是错误的原因是什么?
P.S。当我nm libnetsnmpmibs.so.15 | grep strlen
时,我的输出为U strlen
。这是否意味着未定义?
答案 0 :(得分:1)
我遇到了问题。实际上主要的是仅使用-fPIC
进行编译。
就我而言,我正在使用snmp
正确编译-fPIC
库,但有些函数依赖于其他包的库(nms
)。当我正在进行固件开发时,涉及的包超过20个。所以我用nms
编译了-fPIC
个库,并解决了错误。