码迷,mamicode.com
首页 > 系统相关 > 详细

linux下将.a文件链接到.so文件的问题

时间:2014-11-25 14:20:38      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:ar   sp   文件   问题   bs   ad   ef   linux   nbsp   

比如在链接lib123.a库生成libabc.so库时经常会遇到这个问题,当链接libabc.so时出现以下错误:

libabc.so: undefined reference to `XXX‘

在readelf -s lib123.a | grep "XXX"时,显示

165: 0000000000000c70   275 FUNC    GLOBAL DEFAULT    1 XXX

而readelf -s libabc.so | grep "XXX"时却

2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND XXX

表明在lib123.a有该符号,而在libabc.so中却未定义该符号,说明在链接lib123.a库生成libabc.so库时符号未导过来。

这可以通过以下方法解决:

在生成libabc.so时添加选项-Wl,--whole-archive

gcc -shared -Wl,--whole-archive lib123.a -Wl,--no-whole-archive -o libabc.so

--whole-archive和--no-whole-archive是ld的选项,gcc通过-Wl传给ld,--whole-archive表明在此之后的静态库中的符号都导出,--no-whole-archive表明在此之后关闭此选项,这样就将lib123.a中的符号真正导出给libabc.so了

这次再readelf -s libabc.so | grep "XXX"

2959: 00000000004a5130   275 FUNC    GLOBAL DEFAULT   11 XXX

这样就成功了。

linux下将.a文件链接到.so文件的问题

标签:ar   sp   文件   问题   bs   ad   ef   linux   nbsp   

原文地址:http://www.cnblogs.com/bbizz/p/4120735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!