error使用-fPIC编译共享库

时间:2011-12-09 12:50:14

标签: shared-libraries cross-compiling snmpd

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

1 个答案:

答案 0 :(得分:1)

我遇到了问题。实际上主要的是仅使用-fPIC进行编译。

就我而言,我正在使用snmp正确编译-fPIC库,但有些函数依赖于其他包的库(nms)。当我正在进行固件开发时,涉及的包超过20个。所以我用nms编译了-fPIC个库,并解决了错误。