linux下将.a文件链接到.so文件的问题
linux下将.a文件链接到.so文件的问题时间 2014-11-25 15:30:01 姜糖水原文 http://www.cnphp6.com/archives/63743主题 Linux比如在链接lib123.a库生成libabc.so库时经常会遇到这个问题,当链接libabc.so时出现以下错误:libabc.so: undefined ref
linux下将.a文件链接到.so文件的问题
比如在链接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
这样就成功了。
更多推荐
所有评论(0)