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();
}
View Code
复制代码

使用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

 

posted @   cocoajin  阅读(1675)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示