一步步教你编写实现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 location
1234 /home/user/dynamiclibs

更新配置:

sudo ldconfig

4. 使用相关命令

  • ld:用于静态和动态链接可执行文件。
  • ldd:查看可执行文件的动态链接依赖。
  • ldconfig:更新动态链接器的配置。
  • nm:查看动态库中的符号。

5. 注意事项

  • 在编译和打包静态库时,确保所有相关.o文件都被包括。
  • 动态库需要在编译和链接阶段正确声明,以及在运行时正确配置。
  • 配置路径时,应确保路径正确且具有权限。

通过以上步骤,您应该能够在Ubuntu环境下成功创建和使用静态库和动态库,并根据需要进行配置。

上一篇:树莓派配置阿里云镜像源
下一篇:树莓派3B使用远程桌面连接

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月28日 13时16分53秒