linux 链接静态库

koalapheonix 2011-09-14 10:58:10
我的程序要链接一些静态库,这些静态库也是我自己写的。
g++ -o program a.o b.o -L../lib -lutil -lfoo

其中libfoo.a里一些函数在libutil.a中。
然后编译的时候出报在libfoo.a中没有定义***函数。如下
undefined reference to `update::CSegmentReader::getSegmentInfo()'

但是我把libfoo.a和libutil.a用ar -x解压,再用ar cru打成一个包libcore.a

再用g++ -o program a.o b.o -L../lib -lcore就可以了。‘

真是不明白为什么呀!

而且我写了一个非常简单的例子,测试了一下
g++ -o program a.o b.o -L../lib -lutil -lfoo这种写法,应该是没问题的。
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-09-14
  • 打赏
  • 举报
回复
额,不清楚静态库,把静态库当作.c源文件看待,这样就会清晰很多,该有的依赖都先依赖好。
pathuang68 2011-09-14
  • 打赏
  • 举报
回复
xunxun 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]

……还有顺序问题?

反正我没遇到过,可能我用gcc都是动态库
[/Quote]
显然有顺序问题啊
动态库链接时是自动no-undefined的,所以没这个问题

如果不想链接来连接去的,可以使用链接库组
即使用
-Wl,--start-group和-Wl,--end-group

你的例子可以写为
g++ -o program a.o b.o -L../lib -Wl,--start-group -lutil -lfoo -Wl,--end-group
jackyjkchen 2011-09-14
  • 打赏
  • 举报
回复
……还有顺序问题?

反正我没遇到过,可能我用gcc都是动态库
forcomponent 2011-09-14
  • 打赏
  • 举报
回复
记得在某个地方看到过....静态库的链接要考虑顺序的问题...

g++ -o program a.o b.o -L../lib -lfoo -lutil这样应该就可以了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧