linux下g++ 静态库的链接问题

lixuehui 2007-07-03 04:16:41
现有目录src以及它下面a b c d四个子目录,src下面有test.cpp; a,b,c,d分别对应一个模块

将各个子目录编译成四个静态库:liba.a libb.a libc.a libd.a

其中b中用到a里的函数接口,d用到b和a中的接口,c用到d中接口(假设没有相互间的依赖)

四个子目录编译完后都生成了各自的*.a文件

这时需将四个库加入到test.cpp编译过程中以生成可执行文件

其中几个库会提示相互需要的函数接口找不到

将库生成的顺序调整为 liba.a libb.a libd.a libc.a也是不行。

请问原因是什么?

如何避免“ undefined reference to....”这样的问题?

PS:如果改用动态库的话不存在这样的问题。
...全文
1050 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixuehui 2007-07-09
  • 打赏
  • 举报
回复
谢谢各位,问题已经解决。还是顺序没调整好。
mymtom 2007-07-04
  • 打赏
  • 举报
回复
楼上说的对试试改为 libc.a libd.a libb.a liba.a 的顺序
静态链接时,LD以固定顺序进行链接,命令行的目标文件和库之间需要按调顺序出现(即调用的目标文件或库在前,被调用的库在后),才能链接成功,如果顺序不正确,往往链接失败。
可以参看:
http://blog.csdn.net/mymtom/archive/2007/07/01/1674184.aspx
mauricewoo 2007-07-03
  • 打赏
  • 举报
回复
将库生成的顺序调整为 liba.a libb.a libd.a libc.a也是不行。
--------------------
我估计还是先后顺序的问题。把这4个lib顺序反过来看看行不行?
dai_weitao 2007-07-03
  • 打赏
  • 举报
回复
你的编译命令是什么?写出来看看, 帮你改改

23,131

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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