linux gcc 编译动态类库(.so)和静态类库(.a)
linux gcc 编译动态类库(.so)和静态类库(.a)
我的编译环境 ubuntu desktop 16.04
一:测试代码
测试有3个文件:AB.h,AB.c,test.c

//AB.h void hello(); //AB.c #include <stdio.h> void hello() { printf("hello from AB.c \n"); } //test.c #include <stdio.h> #include "AB.h" void main(void) { printf("it is main\n"); hello(); }
使用gcc, 编译运行,显示结果:
cocoa@ubuntu:~/Desktop/demo$ gcc AB.c test.c
cocoa@ubuntu:~/Desktop/demo$ ./a.out
it is main
hello from AB.c
二:gcc 编译静态类库 .a
//编译点o文件 cocoa@ubuntu:~/Desktop/demo$ gcc -c AB.c //编译为AB.o文件 cocoa@ubuntu:~/Desktop/demo$ ls AB.c AB.h AB.o a.out test.c //打包成.a 文件 cocoa@ubuntu:~/Desktop/demo$ ar -crv libAB.a AB.o a - AB.o //编译测试程序,测试libAB.a cocoa@ubuntu:~/Desktop/demo$ gcc -o testlibA test.c libAB.a //测试程序 testlibA cocoa@ubuntu:~/Desktop/demo$ ls AB.c AB.h AB.o a.out libAB.a test.c testlibA //运行测试,输出结果与上面一致 cocoa@ubuntu:~/Desktop/demo$ ./testlibA it is main hello from AB.c cocoa@ubuntu:~/Desktop/demo$
三:gcc 编译动态类库 .so
//编译AB.c 为动态类库libAB.so cocoa@ubuntu:~/Desktop/demo$ gcc -shared -o libAB.so -fPIC AB.c //查看 cocoa@ubuntu:~/Desktop/demo$ ls AB.c AB.h AB.o a.out libAB.a libAB.so test.c testlibA //编译测试程序testSO,并链接当前目录下的libAB.so cocoa@ubuntu:~/Desktop/demo$ gcc -o testSO test.c -lAB -L. //设置一下动态类库路径 cocoa@ubuntu:~/Desktop/demo$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH //运行测试程序,结果与上述一致 cocoa@ubuntu:~/Desktop/demo$ ./testSO it is main hello from AB.c cocoa@ubuntu:~/Desktop/demo$
对外提供,只需要把 AB.h 和libAB.a 或libAB.so 即可;
参考:http://www.cnblogs.com/ymy124/archive/2012/04/13/2446434.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具