dlopen第三方动态库时经常会发生打开失败的错误,可以适用dlerror()函数查看具体错误:
void *dlh;
dlh = dlopen("libdes3-32.so", RTLD_NOW | RTLD_GLOBAL);
if (dlh == NULL)
{
printf("dlopen err:%s.\n",dlerror());
}
如果错误信息与ELF格式相关,一般是第三方库的编译环境与本地环境差别所致,如不同的处理器体系结构。
采用file命令可以查看动态库的具体信息:
# file libhsbcpwd.so
libhsbcpwd.so: ELF 32-位 MSB 动态库 SPARC 版本 1,动态链接,没有除去,无可用的调试信息
# file libdes3-32.so
libdes3-32.so: ELF 32-位 LSB 动态库 80386 版本 1,动态链接,没有除去,无可用的调试信息
MSB是Most Significant Bit的缩写,最高有效位。在二进制数中,MSB是最高加权位。与十进制数字中最左边的一位类似。通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。 LSB(Least Significant Bit),意为最低有效位;MSB(Most Significant Bit),意为最高有效位,若MSB=1,则表示数据为负值,若MSB=0,则表示数据为正。
SPARC:SUN和TI公司合作开发的RISC微处理器。
80386:INTEL处理器。x86架构是可变指令长度的CISC(复杂指令集计算机,Complex Instruction Set Computer)。