使用-fPIC参数编译的动态库报 unexpected reloc type 0x03

使用-fPIC参数编译的动态库报 unexpected reloc type 0x03

在编译动态库时,由于没有加 -fPIC 参数,导致运行程序连接该动态库时报错:unexpected reloc type 0x03

查询资料,得出需要在编译动态库时使用 -fPIC 参数后,才能解决这个问题。

根据在gcc编译参数中增加 -fPIC 参数后,编译出来的库还是会报:unexpected reloc type 0x03 错误。

原因
通过查看编译参数发现,其中还存在 -fPIE -pie 参数
查询相关资料,发现 PIE 和 PIC 是类似的功能,一个是用于动态库编译,一个是用于可执行文件的编译。

修改
把编译参数中的 -fPIE -pie 去掉后,编译的动态库就可以正常链接了。

其他

使用 readelf -d libtest.so|grep TEXTREL 结果是否为空,可以确认库是否有使用 -fPIC 参数编译,空则有使用 -fPIC
使用 readelf -r libtest.so|grep R_ARM_REL32 也有同样的效果,并且能查看到具体是哪个函数导致的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值