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复制出来就可以了。

 

最后:

在这之前我还有一个疑惑是为什么动态库不能包含另一个动态库。

在我说出我的想法之前,想请大家先自行想一下。

还有,如果动态库能包含另一个动态库的话,又会是什么情况。

~~~~~~~~~~~~~~

跳转

Logo

更多推荐