当前位置: 首页 > news >正文

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

 

转载于:https://www.cnblogs.com/cocoajin/p/5521094.html

相关文章:

  • jQuery学习和知识点总结归纳
  • 如何判断链表是否是回文
  • igraph安装(R/Python)
  • 【学习笔记】屏幕尺寸的信息
  • 在Mac OS X上安装 Ruby运行环境
  • [译]CSS 居中(Center)方法大合集
  • java httpclient使用socks5代理(二)使用socks5代理服务
  • C#:为详情查看界面设计的万用TextBox自定义控件
  • JS --事件
  • Sublime Text 3 关闭自动提示
  • 用verilog模拟DDS产生正弦波信号
  • 第k个元素(模板)
  • 景德镇特色的部门级别与权限
  • swift 字符串创建类
  • push 和pop的区别
  • [译]前端离线指南(上)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • C++11: atomic 头文件
  • Centos6.8 使用rpm安装mysql5.7
  • es6
  • Java多线程(4):使用线程池执行定时任务
  • Java基本数据类型之Number
  • MaxCompute访问TableStore(OTS) 数据
  • Next.js之基础概念(二)
  • QQ浏览器x5内核的兼容性问题
  • session共享问题解决方案
  • Unix命令
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue自定义指令实现v-tap插件
  • WePY 在小程序性能调优上做出的探究
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 关于List、List?、ListObject的区别
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊redis的数据结构的应用
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 入口文件开始,分析Vue源码实现
  • 实习面试笔记
  • 微信支付JSAPI,实测!终极方案
  • 新手搭建网站的主要流程
  • ionic入门之数据绑定显示-1
  • Prometheus VS InfluxDB
  • 阿里云服务器如何修改远程端口?
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #控制台大学课堂点名问题_课堂随机点名
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (阿里云万网)-域名注册购买实名流程
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (补)B+树一些思想