undefined reference to symbol xx@@GLIBC_2.2.5

问题描述

我在编译A库的时候依赖了其他的B静态库,出现此问题,当A库编译为静态库时无报错,当A库编译为动态库时报错

解决办法

recompile with -fPIC。无法解决R_AARCH64_ADR_PREL_PG_HI21重定向于符号__stack_chk_guard@GLIBC_2.17

如果是有类似这句话的话,那大概率是因为在编译B静态库时没有加上-fPIC选项,而编译A库的时候加了-fPIC选项,导致不兼容。重新编译B静态库,具体应该怎么加参考此篇博文:
https://blog.csdn.net/m0_37876242/article/details/121786076
该博主修改Makefile的方式进行了-fPIC编译,但是发现不仅B的源码主目录下有Makefile,在src和其他目录下依然有Makefile文件,不知道只改主目录下的Makefile是否有用,所以直接在B的主目录下运行 ./comfigure --help 看一下编译选项,–enable-static是编译静态库,–enable-shared是编译动态库,–with-pic好像是以pic的方式编译,所以用configure生成Makefile时加上这三个命令,查看生成的Makefile文件,在CFLAGS =*******这里并没有发现-FPIC这个选项,但是后面确实不报错了。

还是报错

还有可能就是编译A时依赖的B库顺序不对,例如B库还依赖C库,关系为:A->B->C,那么不仅C需要加-fPIC选项,并且在编译A时,引库方式应该为:
-B -C,也就是先依赖B,再依赖C,我在这里卡了两天。。。。最后无意间才发现自己编译A的Makefile依赖库顺序写反了!!

还是报错

在编译A时在编译命令末尾加上-lpthread -lrt -ldl -rdynamic -lstdc++ -lm

还是报错

一般到这里接差不多了,还报这个错误我也无能为力了,欢迎大家留言讨论互帮互助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值