
一步步教你编写实现Liunx静态库和动态库
发布日期:2021-05-15 04:44:08
浏览次数:19
分类:精选文章
本文共 2219 字,大约阅读时间需要 7 分钟。
Ubuntu 下静态库与动态库的创建与使用指南
在开发过程中,了解并正确使用静态库和动态库是至关重要的。本文将详细介绍如何在Ubuntu环境下创建和使用这两种类型的库,以及相关的配置方法。
1. 静态库的创建与使用
1.1 创建库的头文件
首先,我们需要编写一个头文件,声明我们的功能。
#ifndef __MYMATH_H_#define __MYMATH_H_int getMax(int x, int y);int getMin(int x, int y);#endif
1.2 创建库的实现代码
编写一个.c文件实现上述函数。
#include "mymath.h"int getMax(int x, int y) { return x > y ? x : y;}int getMin(int x, int y) { return x < y ? x : y;}
1.3 将源文件编译为目标文件
使用gcc编译器将.c文件编译为.o文件。
gcc -c -o mymath.o mymath.c
如果需要支持ARM架构,使用交叉编译器:
arm-linux-gnueabi-gcc -c -o mymath.o mymath.c
1.4 生成静态库
使用ar命令将目标文件打包成静态库文件。
ar rcs libmymath.a mymath.o
对于ARM架构:
arm-linux-gnueabi-ar rcs libmymath.a mymath.o
1.5 编写测试程序
编写一个主程序测试我们的静态库。
#include#include "mymath.h"int main() { int x, y; scanf("%d%d", &x, &y); int max = getMax(x, y); int min = getMin(x, y); printf("max=%d, min=%d\n", max, min); return 0;}
1.6 编译并执行
使用gcc编译可执行文件,将静态库路径添加进去。
gcc -o main main.c -L. -lmymath
2. 动态库的创建与使用
2.1 编写动态库的实现代码
编写一个实现相同函数的动态库。
#include "mymath.h"// 由于是在动态库中定义,不能再使用这些函数符号extern "C" {int getMax(int x, int y) { return x > y ? x : y;}int getMin(int x, int y) { return x < y ? x : y;}} // 通常为防止名字重复,建议使用外部符号
2.2 将代码编译为动态库
使用gcc创建.so动态库。
gcc -fpic -shared -o libmymath.so mymath.c
对于ARM架构:
arm-linux-gnueabi-gcc -fpic -shared -o libmymath.so mymath.c
2.3 编写测试程序
在主程序中使用动态库。
#include#include "mymath.h"int main() { int x, y; scanf("%d%d", &x, &y); int max = getMax(x, y); int min = getMin(x, y); printf("max=%d, min=%d\n", max, min); return 0;}
2.4 将动态库与程序链接
使用gcc编译可执行文件,并指定动态库路径。
gcc -o main main.c -L./ -lmymath
3. 配置动态库的使用方法
3.1 将.so文件复制到标准目录
将生成的.so文件复制到/usr/lib或/lib中。
sudo cp libmymath.so /usr/lib/
对于ARM设备,复制到/lib/。
3.2 设置LD_LIBRARY_PATH环境变量
临时配置可以通过修改环境变量。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/dynamic/library
3.3 配置配置文件
配置/etc/ld.so.conf文件,添加动态库的路径。
sudo vim /etc/ld.so.conf
添加路径:
# my customDynamic library location1234 /home/user/dynamiclibs
更新配置:
sudo ldconfig
4. 使用相关命令
- ld:用于静态和动态链接可执行文件。
- ldd:查看可执行文件的动态链接依赖。
- ldconfig:更新动态链接器的配置。
- nm:查看动态库中的符号。
5. 注意事项
- 在编译和打包静态库时,确保所有相关.o文件都被包括。
- 动态库需要在编译和链接阶段正确声明,以及在运行时正确配置。
- 配置路径时,应确保路径正确且具有权限。
通过以上步骤,您应该能够在Ubuntu环境下成功创建和使用静态库和动态库,并根据需要进行配置。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月28日 13时16分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java多线程
2019-03-07
Unity监听日记
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07
Explore Optimization
2019-03-07
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
2019-03-07
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
2019-03-07