当我在 powerpc board(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
我用谷歌搜索,发现-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" \`
如您所见,我-fPIC
在 gcc 之后立即嵌入,但仍然出现错误。我已经为 powerpc 平台进行了交叉编译,我正在使用最新的 buildroot-2011.11 和 gcc 4.3.6 和 uClibc 版本 0.9.32。错误的原因可能是什么?
PS当我这样做时 nm libnetsnmpmibs.so.15 | grep strlen
,我得到的输出为U strlen
. 这是否意味着它未定义?