使用-nostdlib链接静态库出现undefined reference to __dso_handle报错
报错核心原因
-nostdlib参数会禁用标准库、启动文件的自动链接,而共享库依赖的关键符号__dso_handle默认定义在gcc的内置支持库中,你没有手动链接对应库就会出现未定义引用报错- 你使用的
libfreeimage.a静态库编译时未添加-fPIC参数,arm64架构下静态库要嵌入共享库,所有代码必须编译为位置无关代码,这也是报错中重定位错误的触发原因
修复步骤
- 重新编译
libfreeimage.a,编译所有目标文件时都添加-fPIC参数,确保静态库适配共享库链接要求 - 调整链接命令,在保留
-nostdlib的前提下手动添加gcc底层支持库的链接参数,不需要引入完整标准库,不会影响你原有的加固需求
调整后可用的链接命令如下:
g++ -shared -fPIC -nostdlib a.o b.o c.o libfreeimage.a -lgcc -lgcc_s -o libmy_so.so
如果调整后仍有少量基础符号未定义,可以额外追加-lc链接最小化C标准库即可。
内容的提问来源于stack exchange,提问作者prgbenz
相关产品推荐
相关产品推荐

