linux ar 静态包

program2050 2014-05-05 10:33:57
举个例子,
需要编译一个静态库(libxx.a),其中使用了mysql的静态库(libmysqlclient.a).

成功得到了libxx.a后,给其他应用程序使用。


其他应用程序使用libxx.a的同时,还是必须得libmysqlclient.a。
而如果不是先打包libxx.a,而是直接编译成一个可执行程序的时候,即使没有libmysqlclient.a的时候,可执行程序也是可以运行的。
这是为什么呢?


我是这样理解的,是因为 ar 仅仅只是将.o文件打包成了libxx.a,里面没有包括有mysql的东东的。
所以其他应用程序要来使用libxx.a的时候,还是得自行准备libmysqlclient.a等用到的第三方库的。

各位大侠,是这样的吗?
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
program2050 2014-05-08
  • 打赏
  • 举报
回复
引用 9 楼 Leeboy_Wang 的回复:
[quote=引用 8 楼 Leeboy_Wang 的回复:] 我也发现了,我认为ar只是对程序进行编译打包,不进行链接所以不会包含使用的库的方法实现,但当程序编译的时候,会链接,这个时候就需要库的具体实现
http://blog.csdn.net/leeboy_wang/article/details/25188645[/quote] 赞一个!
leeboy_wang 2014-05-07
  • 打赏
  • 举报
回复
引用 8 楼 Leeboy_Wang 的回复:
我也发现了,我认为ar只是对程序进行编译打包,不进行链接所以不会包含使用的库的方法实现,但当程序编译的时候,会链接,这个时候就需要库的具体实现
http://blog.csdn.net/leeboy_wang/article/details/25188645
leeboy_wang 2014-05-07
  • 打赏
  • 举报
回复
我也发现了,我认为ar只是对程序进行编译打包,不进行链接所以不会包含使用的库的方法实现,但当程序编译的时候,会链接,这个时候就需要库的具体实现
zhxianbin 2014-05-06
  • 打赏
  • 举报
回复
引用 5 楼 program2050 的回复:
[quote=引用 3 楼 falloutmx 的回复:] 没错,你看看libxx.a里包含的文件,是不包含libmysqlclient.a。 如果想只用一个libxx.a,就把libmysqlclient.a解压成.o一起链接
是吗,有空的时候写个测试一下。 不过貌似我ar x解压后, 再ar cr的时候竟然报:File format not recognized 奇怪。。。[/quote] http://bbs.csdn.net/topics/390769676 这个可以参考
program2050 2014-05-06
  • 打赏
  • 举报
回复
引用 3 楼 falloutmx 的回复:
没错,你看看libxx.a里包含的文件,是不包含libmysqlclient.a。 如果想只用一个libxx.a,就把libmysqlclient.a解压成.o一起链接
是吗,有空的时候写个测试一下。 不过貌似我ar x解压后, 再ar cr的时候竟然报:File format not recognized 奇怪。。。
zhxianbin 2014-05-06
  • 打赏
  • 举报
回复
补充:用 ar x 可以解压出 .a中的 .o 文件
falloutmx 2014-05-06
  • 打赏
  • 举报
回复
没错,你看看libxx.a里包含的文件,是不包含libmysqlclient.a。 如果想只用一个libxx.a,就把libmysqlclient.a解压成.o一起链接
KeequenLiu 2014-05-06
  • 打赏
  • 举报
回复
是这样的,你可以通过 ar -t libxx.a查看库中的文件。
zhxianbin 2014-05-06
  • 打赏
  • 举报
回复
而如果不是先打包libxx.a,而是直接编译成一个可执行程序的时候,即使没有libmysqlclient.a的时候,可执行程序也是可以运行的。 这是为什么呢? 这是因为静态库编译时链接进入应用程序了,所以不需要了。 google 静态库 动态库

23,120

社区成员

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

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