Linux动态库的创建与使用
来源:互联网 发布:windows dns 日志 编辑:程序博客网 时间:2024/05/20 22:40
以下是一个简单的例子:三个文件libtest.h, libtest.c和main.c
libtest.c定义动态库函数,main.c调用动态库函数, 为简单起见,这三个文件保存在同一个目录中。
/*libtest.h*/void test(void);
/*libtest.c*/
#include “stdio.h”
#include "libtest.h"
void test(void)
{
printf("run test() in libtest.so\n");
}
/*main.c*/
#include "libtest.h"
int main(void)
{
test();
return 0;
}
以下是创建动态库的操作:
1、进入以上源文件所在目录
2、执行gcc -fPIC -shared libtest.c -o libtest.so
以下是编译并生成main可执行程序的操作:
1、执行gcc main.c -o main -L . -ltest (-L指定编译时的链接路径)
2、执行ldd main来打印main可执行文件的动态库依赖关系表
3、运行main程序,正常打印run test() in libtest.so
编译参数解析:
-shared 该选项指定生成动态链接库(让链接器生成T类型的导出符号表,有时候也生成弱链接W类型的导出符号),不用该标志外部程序无法链接。
-fPIC 表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
-L. 表示要链接的库在当前目录中。
-ltest 编译器查找动态链接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名。
当libtest.so不在动态链接库的搜索路径下时,运行ldd main命令,在显示的信息中,发现有一行:libtest.so => not found,表明链接程序找不到libtest.so文件。
办法一:把libtest.so拷贝到链接程序的搜索路径目录(/lib,/usr/lib)下。
办法二:打开/etc/profile,在文件最后添加export LD_LIBRARY_PATH="/home/mylib/:"$LD_LIBRARY_PATH,保存退出后,运行source /etc/profile命令。
办法三:打开/etc/ld.so.conf,在文件最后添加/home/mylib/,保存退出后,运行ldconfig命令。
原文整理自:http://hi.baidu.com/sunboy_2050/item/3ab94beed9d01ed9eb34c9cd
http://www.cppblog.com/toMyself/archive/2010/08/02/121971.html
http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html
- linux 动态库的创建与使用
- Linux动态库的创建与使用
- Linux静态库和动态库的创建与使用
- linux---静态库与动态库的创建、生成、使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- linux动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- Linux下动态库的创建与使用
- LINUX系统中动态链接库的创建与使用
- Linux动态链接库.so文件的创建与使用
- Linux动态链接库的创建与使用
- adb shell input 命令
- cocos2d-x精灵自定义路径移动
- 网页右侧的漂浮广告代码,随滚动条滚动
- 每天必做的3件事
- 源码管理工具(SCM)之备忘
- Linux动态库的创建与使用
- cocos2d-x之滚动背景
- 开源算法库GMP的安装与调试
- vnc 搭建和使用
- Through the Interface——.NET 和 AutoCAD
- Cacti 移植,从Cacti到CactiEZ
- 二分匹配模版
- Eclipse and Android SDK issue “aapt.exe has stopped”
- IT战略规划之流程再造 —2013年中科院计算所培训中心系列公益讲座