shared-libraries - 错误使用-fPIC编译共享库

标签 shared-libraries cross-compiling snmpd

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

相关文章:

c - 运行独立共享库时 gdb 不加载符号

c - .so 库是否需要在所有情况下都在运行时存在

c++ - Linux c++ 可移植二进制问题

macos - 如何在 ARM M1 Apple Silicon Mac 上将 Rust 代码交叉编译为 Intel 程序集?

c++ - 在运行时加载的 dll/so 中 atexit() 的行为是什么?

c++ - 使用arm-musl交叉编译,ERROR> proc_open : hidden symbol `__init_array_end' in proc_open is referenced > by DSO

c - 当我尝试交叉编译 mips64 的 libperl 时,为什么会出现语法错误?

snmpset 对象不可写。为什么?

ubuntu-14.04 - snmpd 的 SNMPDOPTS 中的 mteTrigger 选项有什么作用?