一、关于在Linux中使用gcc生成静态库和动态库的练习;
1)静态库与动态库仿做:
第一步:编辑生成子程序hello.h、hello.c和main.c
先创建一个作业目录,保存本次练习的文件。
#mkdir test1
#cd test1
然后使用vim编辑生成所需的三个文件
程序1:hello.h
程序2:hello.c
程序3:main.c
第二步:将hello.c编译成.o文件,并使用ls查看是否生成hello.o文件
第三步:由.o文件创建静态库。
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。创建静态库使用ar命令。
第四步:在程序中使用静态库。
制作了由hello.o生成的静态库myhello。在使用时需要在用到这些公用函数的源程序中包含这些公用函数的原型声明(在主程序main.c中*#include “hello.h”*该语句就算是声明),然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将这些公用函数连接到目标文件中。注意:gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。
下面下生成目标程序hello,然后运行程序看结果。
第五步:由.o文件创建动态库文件。
动态库文件命名规范与静态库文件类似,在参数上略有差别。
下面生成动态库libmyhello2.so
第六步:在程序中使用动态库;
在程序中使用动态库和使用静态库完全一样;
可执行文件hello2的创建没有出错,在运行hello2的时候出错了,是因为动态库在程序编译时并不会被连接到代码中,而是在程序运行时才被载入,而此处报错是因为在运行时无法在/usr/lib目录下找到libmyhello2.so文件,所以通过将文件复制到/usr/lib目录下,且此处需要管理员权限才能复制,所以要加上sudo,即sudo mv libmyhello2.so /usr/lib,才能正常运行。
注:当静态库和动态库同名时,gcc命令(不指定某一个库时)会优先使用动态库,
2)静态库与动态库实作:
静态库:
使用vim编写x2x.h与x2x.c程序:
编写x2y.h与x2y.c程序:
编写main.c程序:
写好后使用ls查看文件:
使用ar将x2x和x2y生产静态库文件:
用gcc将main函数的目标文件与此静态库连接,生成最终的可执行文件,记录文件大小:
使用ls -l 文件名字即可查询文件大小
注:这里的main.c有警告但是影响不大
文件大小为8416Bit
动态库:
使用ar将x2x和x2y生产动态库文件:
用gcc将main函数的目标文件与此动态库连接,生成最终的可执行文件,记录文件大小:
可以看到动态库文件的大小为8360B是要比静态库小一些的
二、Linux GCC常用命令
1.简单编译:
test.c程序: