(1) 使用编译选项 -fPIC ,产生与位置无关的代码
(2) 使用编译选项 -fvisibility=hidden 隐藏符号
(3) 使用链接选项 -shared 表示生成动态链接库
(4) 使用链接选项 -wl 将参数传递给链接器
(5) 使用链接选项 -soname 指定库名,注意不是库文件名
(6) 保险起见,显式链接 C 库,即指定 -lc ,保证得到所需的启动代码,避免程序在有不兼容版本 C 库的系统上无法启动
(7) 为对外输出符号加上特殊声明, __attribute__((visibility("default")))
(8) 为了让 GCC 编译链接时能找到非默认路径下的动态链接库,在 /etc/profile 中添加 GCC 的 LIBRARY_PATH 环境变量
(9) 为了让程序运行时能自动找到非默认路径下的动态链接库,在 /etc/ld.so.conf 中添加路径,然后用 /sbin/ldconfig 更新缓存
(10) 例子:
a) int func() __attribute__((visibility("default")));
b) gcc –fPIC –fvisibility=hidden –g –c xxx.c –o xxx.o
c) gcc –g –shared –Wl,-soname,libxyz.so –o libxyz.so.1.0 xxx.o
export LD_LIBRARY_PATH=thirdparty/lib 增加自己的 动态库路径
分享到:
相关推荐
本教程将通过一个实例深入探讨Linux下C/C++语言如何开发和使用动态链接库。 一、动态链接库基础 动态链接库与静态链接库(.a文件)的主要区别在于,静态链接库在编译时会将库中的代码合并到可执行文件中,而动态...
总结来说,"linux动态链接库示例"是一个关于如何在Linux环境下使用C语言创建、编译和使用动态链接库(`.so`文件)的过程。通过理解这些步骤,开发者能够更好地管理和利用系统资源,提高软件的复用性和维护性。
在Linux系统中,C语言的库分为静态链接库和动态链接库两种类型,它们都是为了实现代码重用和模块化设计的重要工具。本篇文章将深入浅出地介绍这两种链接库的原理、创建方法以及如何在程序中使用。 一、静态链接库 ...
本篇文章将深入探讨如何在Linux下的Qt环境中创建和使用动态库。 首先,创建动态库涉及以下步骤: 1. **项目设置**:在Qt Creator中,新建一个Qt Console Application项目。选择“New File or Project” -> ...
### Linux下使用动态链接库和静态链接库的项目建立及单步调试 #### 一、动态链接库的建立和单步调试 ##### 1.1 编写用户接口文件 `datetime.h` 首先,创建了一个头文件`datetime.h`,该文件定义了两个结构体:`...
通过以上步骤,你已经掌握了如何在 Linux 下创建和使用动态链接库 `.so` 文件的基本方法。这些技能对于开发复杂的软件项目尤其有用,因为它们允许你轻松地管理不同组件之间的依赖关系,并提高代码的可重用性。
在软件开发领域,动态链接库(Dynamic Link Library,简称DLL)技术是提高程序效率和灵活性的关键手段之一。无论是在Windows还是Linux这样的不同操作系统环境中,动态库都发挥着重要的作用。通过动态链接的方式,...
本文介绍了在Linux环境下如何创建和使用静态链接库及动态链接库的方法。通过具体的示例代码和步骤,我们可以看到,无论是静态链接库还是动态链接库,都有其特定的用途和优势。静态链接库适用于那些不希望外部改动或...
在Linux环境下,动态链接库通常被称为共享对象(Shared Object),以`.so`作为文件扩展名。本文将详细介绍如何在Linux系统中创建和使用动态链接库,通过实例讲解整个过程。 #### 二、Linux动态链接库的优势 1. **...
本示例涉及到的是使用C语言创建动态链接库,并在不同的操作系统环境下——Linux(生成`.so`文件)和Windows(生成`.dll`文件)——进行实现。之后,我们还将讨论如何通过Python语言调用这些C语言编写的接口。这一...
Linux系统通常将动态链接库放在`/lib`或`/usr/lib`目录下,但为了演示,我们暂时不考虑这一点。 5. **使用动态链接库**: 在其他程序中使用动态链接库,需要包含对应的头文件(`#include "datetime.h"`),并且在...
动态链接库(Dynamic Link Library),在LINUX环境下通常被称为共享对象(Shared Object),是一种可被多个程序同时加载并使用的库文件。它们以`.so`为扩展名,主要用于实现代码和数据的共享,从而提高系统的资源...
PLT是一个特殊的内存区域,用来存放动态链接库中的函数地址。在这个例子中,`add`函数的地址被记录在内存地址`0x804a00c`处。 当我们从主函数中调用`add`函数时,程序首先会跳转到PLT中的对应项。PLT项中会包含一...
例如,我们可以编写两个函数,一个用于查询当前日期getdate,一个用于查询当前时间gettime,并将这两个函数存于动态链接库my.so中。 首先,我们需要编写用户接口文件datetime.h,内容如下: /* datetime.h : 纵横...
### Linux静态和动态链接库创建和使用 #### 概述 在软件开发过程中,经常会遇到相同功能模块在多个项目中重复出现的情况。例如,多个项目可能都需要实现用户验证功能。为了避免代码重复,提高代码的可维护性和重用...
在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为扩展名)是一种重要的编程资源,它允许程序共享代码,从而节省内存并提高执行效率。本篇文章将深入探讨如何创建和使用`.so`文件,以及相关的重要...
这里的".so"是Linux下的动态链接库扩展名,代表"Shared Object",而".dll"则是Windows下的动态链接库扩展名。 "libcjson.so.1.6.0"是CJSON库的Linux 32位版本,"1.6.0"表示这是CJSON的一个特定版本。这个版本可能...
这个压缩包包含的是OpenCV的2.4.12版本,针对Linux ARM架构的预编译动态链接库。在嵌入式系统,如树莓派、开发板等运行Linux操作系统的ARM设备上进行图像处理和视觉应用开发时,这样的库非常有用。 OpenCV 2.4.12是...