1、 cannot open shared object file: No such file or directory 。主要原因是找不到动态库的路径,解决的办法有三个。
1) 设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔),系统加载工具ld.so/ld-linux.so将顺序搜索变量指定的目录。 如export LD_LIBRATA_PATH=PATH PATH是动态库所在的路径
2) 以root身份把库路径加入/etc/ld.so.conf或在/etc/ld.so.conf.d中创建特定的.conf文件,然后运行ldconfig更新/etc/ld.so.cache。
3) 把需要的库copy到/usr/lib或/lib,但这不是建议的方法,特别是尽量避免copy发到/lib。但这种方法可以在编译时免去用-L选项。
2、如果使用的是C++,采用显示加载so,方法是利用dlopen,dlsym,dlerror函数。但是编译成功运行的时候,经常会出现找不到对应函数的问题。解决方法是在头文件中加入如下代码。原因是c和c++编译之后,产生地函数的标示是不同的。c++会加上类型等。
- #ifdef __cplusplus
- extern "C"{
- #endif
- #ifdef __cplusplus
- }
- #endif
3、还有一个是dlsym函数指针的转换问题,dlsym返回的是一个对象的指针,转为函数指针要采用 “cmd=(int (*)(这里要填写你定义cmd时的参数类型))dlsym ”
阅读(2161) | 评论(3) | 转发(0) |