美文网首页C/C++ || 编译、链接、执行 || docker我爱编程
【转载】linux编程合并多个静态库.a为一个.a

【转载】linux编程合并多个静态库.a为一个.a

作者: dopami | 来源:发表于2018-04-11 20:46 被阅读18次

https://www.cnblogs.com/fnlingnzb-learner/p/8127456.html

.a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表

假设A.a, B.a C.a 在/usr/local/lib目录下

mkdir /tmp/libABC

cd /tmp/libABC

ar x /usr/local/lib/A.a

ar x /usr/local/lib/B.a

ar x /usr/local/lib/C.a

ar cru libABC.a *.o

ranlib libABC.a

1、gcc入门

(1)gcc即是linux下c/c++的编译器。

gcc经常用的的选项有-c,-o。

-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件(二进制文件),一般是.o文件。

-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。

我们在任意位置新建一个test文件夹,方便我们写测试文件。

现在我们新建一个test.cpp文件,里面代码如下:

#include "stdio.h"  

int main()  

{  

printf("test  !!!!!\n");  

return 0;  

}  

-c选项:

gcc -c test.cpp

生成二进制test.o文件,.o文件是一个中间文件 ,可制作成库文件,也可以生成可执行文件。

-o选项:

gcc test.cpp -o test

  或者,利用刚刚生成的test.o文件:gcc test.o -o test

即可生成test可执行文件。

如果命令为:

gcc test.cpp 或 gcc test.o

即像上文所说的生成a.out可执行文件。

2、合并静态库

制作静态库

ar rc libtest.a test.o

现在说本文的重点,合并静态库。

有关制作静态库命令可以参考

linux ar命令

而静态库的使用,百度一下。

注意链接文章说的,静态库的模块是.o文件。

之前我一直想把一个静态库包含到另一个静态库里,比如:ar rc liball.a libtest1.a libtest2.a

即把libtest1.a和libtest2.a包含到liball.a里面,这句话是没问题!

但是这种思路是错的!!!!!

如果当你想要用到libtest1.a或libtest2.a里的函数里,是找不到的!!!

因为liball.a里包含的是libtest1.a和libtest2.a,而gcc找的里.o文件,.o文件里才包含我们写好的方法

所以我们应该这样来写:

制作一个临时文件夹,比如在我们的test文件夹下新建temp文件夹,把从各个.a库导出的.o文件都放到这个文件夹里,再把所以.o文件打成.a库。

命令如下:

cd temp

ar x libtest1.a

ar x libtest2.a

ar rc liball.a *.o

再把liball.a复制出来就可以了。

相关文章

  • 【转载】linux编程合并多个静态库.a为一个.a

    https://www.cnblogs.com/fnlingnzb-learner/p/8127456.html ...

  • 多个静态库合并

    开发一个静态库second.a,其中包含一个其它的静态库first.a。静态库打包有很多教程,不多赘述。 流程介绍...

  • 静态库相关

    1,查看一个静态库信息,XXX为静态库名称 lipo -info XXX 2,合并两个静态库 lipo -crea...

  • iOS 优化App处理

    优化App启动速度 1、减少多个内嵌静态库合并为一个静态库 2、减少C++虚函数数量 3、Swift尽量使用str...

  • linux下静态库和动态库创建和使用

    linux静态库 .a ===== win 静态库 .lib linux动态库 .so ==== win动态库 ....

  • 如何制作静、动态库

    一、静态库的制作 1、基本概念 静态库又称为文档文件(ArchiveFile)。它是多个.o文件的集合。Linux...

  • ios-组件化(模块化)开发

    - 实现组件化开发有哪几种方式? 通过静态库。 通过xcode创建多个子项目,最后合并成一个项目。 创建一个私有库...

  • 2021-06-16 linux链接so

    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面...

  • 静态库,合并真机和模拟器

    静态库,合并真机和模拟器 a,b 为真机和模拟器的路径 。c为合并后的路径。

  • 多个sdk合并一个sdk

    实际业务是多个sdk要合并成一个sdk,给业务方使用。 首先,需要这几个sdk必须是静态库,生成的framewor...

网友评论

本文标题:【转载】linux编程合并多个静态库.a为一个.a

本文链接:https://www.haomeiwen.com/subject/lzozhftx.html