linux下利用gcc编译代码是很平常的事,但却很少利用gcc来将代码编译成库,这次利用一点时间来练习一下linux下gcc编译静态库和动态库的方法,共同学习一下。
有文件如下:
out1.c
#include <stdio.h>
int out1(void)
{
printf("This is function out1.\n");
return 0;
}
out2.c
#include <stdio.h>
int out2(void)
{
printf("This is function out2.\n");
return 0;
}
test.c
#include<stdio.h>
int out1(void);
int out2(void);
int main(void)
{
out1();
out2();
return 0;
}
编译成静态库:
1.先将out1.c和out2.c编译成.o文件:gcc -c out1.c out2.c
2.将生成的两个.o文件链接成静态库:ar -r libout.a out1.o out2.o
3.将其复制到/usr/lib:sudo cp libout.a /usr/lib
4.编译test.c文件:gcc -o test test.c -lout (这里的-lout类似于-lpthread,在/usr/lib下寻找链接库)
编译成动态库:
1.将out1.c和out2.c编译成可共享库的.o文件:gcc -c -fpic out1.c out2.c
2.将生成的两个.o文件链接成动态库:gcc -shared out1.o out2.o -o out.so
3.将其复制到/usr/lib:sudo cp out.so /usr/lib
4.编译test.c文件:gcc -o test test.c out.so
生成的test执行文件执行结果如下:
This is function out1.
This is function out2.