3

当我在 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. 这是否意味着它未定义?

4

1 回答 1

1

我有问题。实际上主要是-fPIC只编译。

就我而言,我正在正确编译snmp库,-fPIC但其中一些函数依赖于其他包的库(nms)。当我从事固件开发时,涉及到 20 多个软件包。所以我编译了nms-fPIC并解决了错误。

于 2012-01-04T06:59:00.633 回答