dlopen Linux 动态库失败原因与解决办法总结

1、dlopen 动态库失败原因,我碰到主要是以下几点(碰到新问题之后再完善,先打个点)

①动态库位置没有放对地方,dlopen 时候找不到你想操作的动态库

解决办法:放到指定目录。

②头文件没有包全,有不能识别的函数或者标识符

解决办法:加一条打印信息,程序运行到这里,会输出不能识别标识符。

if((handle = dlopen(myso, RTLD_NOW)) == NULL) {
        printf("dlopen - %sn", dlerror());
        exit(-1);
    }  

或者用ldd(具体看编译交叉链,这里是用 gcc 编写的动态库,其它交叉编译链视具体情况而定)。

③makefile 编写问题

①没有指定 -fPIC 编译选项 (Position-Independent Code 代码与位置无关);

②没有指定 -shared 外部程序可以访问这个动态库。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-08 07:04:39

dlopen Linux 动态库失败原因与解决办法总结的相关文章

缺少libstdc++.so.6库的原因及解决办法

问题原因:系统是64bit,该库是32bit的,在64bit系统上安装32bit库 解决办法:1. 查看哪个安装包包含该库:yum provides libstdc++.so.6   yum install libstdc++-4.8.5-11.el7.i686 [[email protected] cn_telecom_test_tool]# rpm -qa | grep libstdc   libstdc++-4.8.5-4.el7.x86_64 2. 安装 libstdc++-4.4.7-

【解决】缺少libstdc++.so.6库的原因及解决办法

问题原因: 系统是64bit,该库是32bit的,在64bit系统上安装32bit库 解决办法: 1. 查看哪个安装包包含该库:yum provides libstdc++.so.6 libstdc++-4.4.7-4.el6.i686 2. 安装 libstdc++-4.4.7-4.el6.i686 yum install  libstdc++-4.4.7-4.el6.i686 报错: --> Finished Dependency Resolution Error: Protected mu

struts2中 jsp:forward 失败原因及解决办法

问题:在Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效了,不但调转不过去还报404错误.不知道是Struts2中不支持还是需要其他的配置. 原因:因为struts2采用过滤器的方式处理请求,默认情况时监控url地址的变化 解决办法1.配置web.xml 解决 1 <filter-mapping> 2 <filter-name>struts2</filter-name&g

linux动态库加载的秘密

摘自http://gotowqj.iteye.com/blog/1926734 摘自http://www.360doc.com/content/14/0313/13/12747488_360246417.shtml linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识. 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 =

Linux动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序, 动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执 行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以 整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. //elfhash.h #include <stdio.h> unsign

Linux 动态库相关知识整理

动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知识经常用到,所以整理了一下这方面的知识.静态库相对简单,本文只关心Linux平台下的动态库. 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //elf

LoadLibrary加载动态库失败

LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对.此场景细分为以下几种情况: 1.1 文件路径的确错误.比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a.dll动态库竟然被拷贝到B文件夹下去了. 若真遇到这种低级错误,建议你找个没人的墙角蹲下用小拇指逆时针划圈圈去吧... 1.2 实参传值错误.比如:实参类型为LPCWTR,经常都会因为字符串转换导致实参事与愿违. 网上的经验总结实例.某程序员经过一番周折后通过以下语句调用

Linux动态库搜索路径的技巧

众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了.在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定. 方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径. 可以通过编辑配置文件/etc

关于在linux下出现stdio.h文件不存在等gcc标准库不能找到的解决办法

首先说明一下我的系统配置:ubuntu 12.04     gcc 4.6.3 有几天没有使用ubuntu了,今天拿出来编程序,刚开始编译一个uboot1.1.6的代码.出现了stdio.h:没有那么个文件或目录的错误,因为我是用的arm-linux-gcc交叉编译编的,所以我刚开始怀疑是不是我的编译器有问题.后来我去编译以前写的一个网络程序 用gcc -o test test.c  然后还是出现了stdio.h:没有那么个文件或目录的错误.然后就各种google,百度.最后的解决方案是: 我的