社区
C++ 语言
帖子详情
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
打赏
收藏
Linux下多个动态库和静态库的引用问题
在Linux下,比如静态库 A.a 库依赖于 B.a 那我在写makefile的时候要把B.a加到依赖库里吗? 如果A.a依赖于B.so(动态库)呢? 如果是A.so依赖于B.so呢? 求赐教,十分感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
不用 链接器会处理
linux
动态库
与
静态库
linux
动态库
与
静态库
Linux
——
动态库
和
静态库
与
静态库
不同,
动态库
的代码不会被复制到每个程序中,而是在程序运行时从库文件中加载。这意味着当你链接一个
静态库
到你的程序时,库中的代码会被复制到最终的二进制文件里。在
Linux
中,链接过程分为两个阶段:编译(Compilation)和链接(Linking)。在实际开发中,开发者可能会根据项目的特点和部署环境来决定使用哪种类型的库。
静态库
和
动态库
各有优缺点,选择使用哪一种通常取决于具体的应用场景和需求。对于
静态库
,链接发生在编译阶段,而
动态库
的链接则发生在程序运行时。(动态链接器)能够找到并加载正确的库文件。
Linux
之
动态库
和
静态库
本文介绍了如何自定义
动态库
、
静态库
以及如何使用自定义的
动态库
和
静态库
。
Linux
——
动态库
和
静态库
https://blog.csdn.net/sjsjnsjnn/article/details/125836184目录一、认识动
静态库
二、回顾编译链接的过程三、库的制作和使用 1.
静态库
的制作 1.生成二进制(.o)文件2.打包3.发布
静态库
2.
静态库
的使用方法一 方法二3.
动态库
的制作 1.生成二进制(.o)文件2.打包3.发布
动态库
4.
动态库
的使用方法一方法二 四、
动态库
与
静态库
特点总结 1.
静态库
的制作 总结: 1.生成二进制(.o)文件
linux
下把
动态库
变成
静态库
将
动态库
中的符号转换为
静态库
中的符号,意味着将
动态库
中的函数和变量等符号提取出来作为
静态库
中的一部分。请注意,这种方法只能将
动态库
中的符号转换为
静态库
中的符号,而无法将动态链接库中的代码转换为
静态库
中的代码。存储方式:
静态库
的代码和符号被编译进可执行文件中,而
动态库
的代码和符号则是在运行时从共享库文件中加载到进程空间中。3.将
动态库
中的每个符号提取到
静态库
中,用objcopy命令将
动态库
中的每个符号提取到
静态库
中,的
静态库
文件,其中包含了从
动态库
中提取的所有符号。4.完成后,你将得到一个名为。
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章