Linux下多个动态库和静态库的引用问题

96掌门师兄 2012-07-20 03:28:29
在Linux下,比如静态库 A.a 库依赖于 B.a 那我在写makefile的时候要把B.a加到依赖库里吗? 如果A.a依赖于B.so(动态库)呢?

如果是A.so依赖于B.so呢?

求赐教,十分感谢!
...全文
462 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saingel 2012-07-23
  • 打赏
  • 举报
回复
静态a文件需要,动态so文件不需要
qq120848369 2012-07-23
  • 打赏
  • 举报
回复
1,静态库是怎么生成的?
答:.o文件打包生成的。
2,.o文件编译需要依赖定义吗?
答:不需要


3,动态库是怎么生成的?
答:.o文件链接生成的。根据2可知必须在链接时指定外部动态库。

4,使用静态库怎么用?
答:直接当作一堆.o参与链接即可,如果某.o依赖外部定义,此时链入即可。

5,使用动态库怎么用?
答:包含头文件编译自己的源码生成.o,链接时引入动态库提供定义。

6,动态库A还依赖动态库B,会影响使用动态库A的程序吗?
答:不会,程序只要链入动态库A即可,动态库A已经链接过,它知道去哪里找自己需要的B。
xunxun 2012-07-23
  • 打赏
  • 举报
回复
按照lz的理解,需要
xunxun 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

这个链接器可不会自动处理,需要自己添加到链接选项里


不是吧 你使用GTK的库 而GTK使用Cairo GDK Mango 等库 你只需要添加`pkg-config --libs --cflags gtk+-2.0` 即可 用不着吧 GDK cairo Mango 等一并填上去
[/Quote]

你要搞清楚pkg-config --libs --cflags gtk+-2.0的展开形式是啥

实际上这个的作用就是通过预先的配置来读取需要链接的库的名称

链接器实际上接受的是这个的执行形式,所以前后加入了 `

你可以手动执行下pkg-config --libs --cflags gtk+-2.0
就知道了
96掌门师兄 2012-07-23
  • 打赏
  • 举报
回复
顶起来,到底要不要呢?
xunxun 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

1,静态库是怎么生成的?
答:.o文件打包生成的。
2,.o文件编译需要依赖定义吗?
答:不需要


3,动态库是怎么生成的?
答:.o文件链接生成的。根据2可知必须在链接时指定外部动态库。

4,使用静态库怎么用?
答:直接当作一堆.o参与链接即可,如果某.o依赖外部定义,此时链入即可。

5,使用动态库怎么用?
答:包含头文件编译自己的源码生成.o,链接时引入动态库……
[/Quote]

第六个不是一直正确的

只有链接器支持-rdynamic的可以认为是对的(非x86/x86_64且非Linux不保证支持)
Linux-Torvalds 2012-07-20
  • 打赏
  • 举报
回复
都需要,否则link的时候会undefined reference symbol
wshn13 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这个链接器可不会自动处理,需要自己添加到链接选项里
[/Quote]

不是吧 你使用GTK的库 而GTK使用Cairo GDK Mango 等库 你只需要添加`pkg-config --libs --cflags gtk+-2.0` 即可 用不着吧 GDK cairo Mango 等一并填上去
fox000002 2012-07-20
  • 打赏
  • 举报
回复
这个链接器可不会自动处理,需要自己添加到链接选项里
wshn13 2012-07-20
  • 打赏
  • 举报
回复
不用 链接器会处理

65,210

社区成员

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

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