制作静态链接库并使用
1、Ubuntu虚拟机中制作静态链接库并使用
1.1、制作静态链接库
(1)首先使用gcc -c只编译不连接,生成.o文件;然后使用ar工具进行打包成.a归档文件。
all:gcc lib_demo.c -o lib_demo.o -car -rc libdemo.a lib_demo.o
(2)库名不能随便乱起,一般是lib+库名称,后缀名是.a表示是一个归档文件。
(3)注意:制作出来了静态库之后,发布时需要发布.a文件和.h文件。
(4)除了ar命令外,还有个nm命令也很有用,它可以用来查看一个.a文件中都有哪些符号。
nm libdemo.a
1.2、使用静态链接库
(1)把.a和.h都放在我引用的文件夹下,然后在.c文件中包含库的.h,然后直接使用库函数。
(2)错误编译方法1:gcc main.c -o main,报错如下:
/usr/bin/ld
:这是链接器(ld),负责把目标文件(.o
)链接成可执行文件。undefined reference to 'func1'
:链接器在所有目标文件和库中都找不到func1
的定义。
usr/bin/ld: /tmp/ccTLarGQ.o: in function `main':
main.c:(.text+0x9): undefined reference to `func1'
collect2: error: ld returned 1 exit status
(3)错误编译方法2:gcc main.c -o main -llibdemo
/usr/bin/ld: 找不到 -llibdemo: 没有那个文件或目录
collect2: error: ld returned 1 exit status
(3)正确编译方法:gcc main.c -o main -ldemo -L.
- -ldemo 表示需要链接libdemo.a这个文件
- -L表示链接的库文件所在的地址,后面的点表示再当前文件夹下