linux c动态链接库的使用
来源:互联网 发布:网络配线架报价 编辑:程序博客网 时间:2024/05/21 18:11
本文以一个简单的例子,介绍linux下动态库的创建和使用操作。其中就无法找到动态库文件的问题简单介绍处理办法。
动态链接库文件在windows平台下往往以.dll为后缀,而在linux平台则一般以.so为后缀,so是shared object的缩写。
感觉在linux下构建动态链接库文件比在windows下省点功夫,使用gcc编译器的话,只需简单地在gcc命令行参数中加上-shared选项
以下是一个简单的例子:三个文件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 -o libtest.so libtest.c
3、执行ls可发现当前目录下多了一个libtest.so的文件, 执行file libtest.so将打印该文件是一个ELF LSB shared-object file.
说明:步骤2的选项-fpic表明创建的动态库文件是position independent code
以下是编译并生成main可执行程序的操作:
1、执行gcc main.c -L. -ltest -o main
2、执行ls将发现当前目录下多了一个main可执行文件。
3、执行ldd main来打印main可执行文件的动态库依赖关系表。
如果在打印出现的信息中,你发现有一行:libtest.so => not found
则表明链接程序找不到我们的libtest.so文件哦,为什么呢?因为链接程序只寻找固定目录,例如/lib目录。如果我们的当前目录是诸如/home/yls/aaa/bbb/ccc这种目录,那么人家是不会主动了解到的。怎么办?
办法一:把libtest.so拷贝到链接程序的搜索路径目录下()。
a、放到usr/local/lib 下(推荐放在这个路径下) /lib一般放的为系统相关的.so
b、然后 执行 :ldconfig
办法二:设置环境变量LD_LIBRARY_PATH,增加当前路径到该变量中。
看看现在LD_LIBRARY_PATH有什么内容吧?执行echo $LD_LIBRARY_PATH就打印出来。
配置环境变量的方法简单点就是:
LD_LIBRARY_PATH=LD_LIBRARY_PATH:"/home/yls/aaa/bbb/ccc";
export LD_LIBRARY_PATH
好了,再次执行ldd就有新发现了。
4、执行./main, OK,输出正常。
如此完成一次动态库建立和调用。
转自:http://blog.csdn.net/a879365197/article/details/71941561
- linux c动态链接库的使用
- linux c动态链接库的使用
- linux C++/C 动态链接库使用
- linux C++/C 动态链接库使用
- c语言起步(2):Linux动态链接库的使用
- Linux下动态链接库的创建和使用及C调用matlab动态库问题
- Linux下动态链接库的创建和使用及C调用matlab动态库问题
- LINUX动态链接库的使用
- linux动态链接库的使用
- linux动态链接库的使用
- LINUX下动态链接库的使用
- Linux下动态链接库的使用
- linux 下动态链接库的使用
- Linux动态链接库的使用
- linux动态链接库的使用
- LINUX下动态链接库的使用
- LINUX动态链接库的使用
- linux下动态链接库的使用
- 理解 Thread.Sleep 函数
- 文章标题
- Python编程入门到实践:(看书总结9-9)
- 洛谷P1330 封锁阳光大学(BFS, 并查集)
- java和javascript正则表达对比
- linux c动态链接库的使用
- poj2195 Going Home(费用流|KM)
- GYM 101243 F.Vitamins【思维+并查集】
- es6第三版笔记
- 用实例来理解redux
- Echarts3.0入门基础与实战(学习笔记)
- poj 1149 PIGS 最大流 太神奇的建图方式!!!
- SANet:Structure-Aware Network for Visual Tracking 阅读笔记
- Linux网络编程--服务端判断客户端断开的经验方法