linux编译生成动态库、静态库,以及使用
一、介绍
在实际开发过程中,当代码的文件较多,可以将一部分代码编译成动态库或者静态库然后再加载到程序中使用
编译过程
1、预编译
2、编译
3、汇编
4、链接
静态库和动态库的差异
1、链接静态库简单理解就是复制目标代码嵌入可执行文件中
2、动态库是在程序运行时被链接的,所以磁盘上只须保留一份副本
3、动态库在程序运行时被链接,故程序的运行速度和链接静态库的版本相比必然会打折扣
gcc总体选项列表
1) -c :指编译,不链接,生成目标文件“.o”。
2) -S :只编译,不汇编,生成汇编代码“.S”。
3) -E :只进行预编译/预处理,不做其他处理。
4) -o file:把输出文件输出到file里。
5) -g :在可执行程序中包含标准调试信息。
6) -v :打印出编译器内部编译各过程的命令行信息和编译器的版本。
7) -I dir :在头文件的搜索路径列表中添加dir目录
8) -L dir :在库文件的搜索路径列表中添加dir目录
9) -static :连接静态库(静态库也可以用动态库链接方式链接)
10) -llibrary :连接名为library的库文件(显示指定需要链接的动态库文件)、
二、动态库
1、生成动态库
gcc -fPIC -shared xxx.c -o libxxx.so
gcc -fPIC -shared xxx1.c xxx2.c xxx3.c -o libxxx.so gcc -fPIC -shared xxx.o -o libxxx.so
gcc -fPIC -shared xxx1.o xxx2.o xxx3.o -o libxxx.so
2、使用动态库
gcc main.c -L. -lxxx -o main
sudo cp libxxx.so /usr/lib/
3、示例
build.sh
echo "rm obj file\n"
rm -rf *.o *.so netupdate newapp
sleep 1
gcc -fPIC -shared download.c file.c tcp.c -o libtcpupdate.so
gcc main.c -L. -ltcpupdate -o netupdate -w
echo "build ok\n"
sudo rm -rf /usr/lib/libtcpupdate.so
sudo cp libtcpupdate.so /usr/lib/
./netupdate
测试
三、静态库
命令 ar
参数 意义
-r 将objfile文件插入静态库尾或者替换静态库中同名文件
-x 从静态库文件中抽取文件objfile
-t 打印静态库的成员文件列表
-d 从静态库中删除文件objfile
-s 重置静态库文件索引
-v 创建文件冗余信息
-c 创建静态库文件
1、生成静态库
ar -rc libxxx.a xxx.o
ar -rc libxxx.a xxx1.o xxx2.o xxx3.o
2、使用静态库
gcc main.c -lxxx -L. -static -o main
gcc main.c -lxxx -L. -o main
3、示例
build.sh
rm -rf main sscom32.zip *.o
sleep 1
rm -rf lib/http/libhttpdownload.a
gcc -c http_download.c tcp.c
ar -rc libhttpdownload.a http_download.o tcp.o
cp ./libhttpdownload.a lib/http/
gcc main.c -lhttpdownload -Llib/http -o main -w
./main http://xzd.197946.com/sscom32.zip
测试
注意
1、在测试过程中,经常会报错:找不到.so文件。一种简单的解决方法如下:
在linux终端输入如下命令:
export LD_LIBRARY_PATH=/home/shaoxiaohu/lib:LD_LIBRARY_PATH:
2、为了保证c++代码能正常使用c的库文件,在接口函数的头文件里要使用以下几行代码,其中宏__cplusplus是c++自定义的。
#ifdef __cplusplus
extern “C” {
#endif
…
#ifdef __cplusplus
}
#endif
linux编译生成动态库、静态库,以及使用相关推荐
- linux系统下的“静态库和动态库”专题之一:库的概念和规则
什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者的库也是不兼 ...
- linux系统下的“静态库和动态库”专题之二:库的创建和使用
接上文[linux系统下的"静态库和动态库"专题之一:库的概念和规则]所述,我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种. – 静态库在程序编译 ...
- Linux快速入门之 静态库和动态库 (07)
文章目录 7.静态库和动态库 7.1 Linux下静态库 7.1.1生成静态库 7.1.2静态库使用 7.2 Linux下动态库 7.2.1 生成动态库 7.2.2 制作动态库 7.2.3 动态库的使 ...
- linux系统应用学习(三)--- 动态库静态库
动态库静态库 库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容. 动态库 静态库 Windows下: xx.dll ...
- linux库--静态库、动态库
文章目录 一.分文件编程思想 二.动态库静态库 1.概念介绍 2.静态库的制作和使用 3.动态库的制作和使用 一.分文件编程思想 好处: 分模块的编程思想 例如: 网络 a 超声波b 电机c a.功能 ...
- linux库引入之动态库静态库(生成和使用)
库: 库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容. 如何使用 用户需要同时具有头文件和库. ...
- Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...
- 【转载】CodeWarrior IDE使用Tips-如何编译生成和调用静态库
CodeWarrior IDE使用Tips-如何编译生成和调用静态库 原创 2017-09-22 胡恩伟 汽车电子expert成长之路 内容提要 引言 1. 嵌入式MCU应用程序开发中的库使用和使用用 ...
- cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...
CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...
- c语言makecode头文件,cmake 添加头文件目录,链接动态、静态库
罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...
最新文章
- 使用函数对4*4的二维数组转置
- 是时候抛弃web.xml了?
- Shadow Brokers扬言兜售新漏洞攻击工具
- 关于JUnit5 你必须知道的(二)JUnit 5的新特性
- 完美解决ArcGIS10.2和Erdas9.2软件冲突的方法:共存!
- 企业主机安全面临的三大风险如何解?
- cookie、session和token
- verilog中的定点数、浮点数、定点小数、定点整数的表示及运算
- 使用iMazing将iPad中的视频文件导出至电脑
- 微信小程序展示弹窗的方式
- win10 更新计算机时间,win10电脑时间不能自动更新
- Java直接运行JavaScript代码或js文件
- 路由器分类2【按功能级别分】
- InsecureProgramming-master——abo3
- 爬虫-漫画喵的100行逆袭
- 【文件系统】uploader实战详解实现分片上传、秒传、续传等(1)
- 阿里云的重大战略调整,“被集成”成核心,发布SaaS加速器助力企业成长...
- 漂亮大气的html导航页面,非常大气漂亮的CSS导航栏
- Linux中read详解
- 手动制造报错_错误消息 : 检测到计算机制造商显卡驱动程序