Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366320
  • 博文数量: 55
  • 博客积分: 2986
  • 博客等级: 少校
  • 技术积分: 666
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-18 10:26
文章分类

全部博文(55)

文章存档

2012年(2)

2011年(16)

2010年(37)

我的朋友

分类: C/C++

2011-11-17 17:58:47

   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++会加上类型等。
  1. #ifdef __cplusplus
  2. extern "C"{
  3. #endif
  4. #ifdef __cplusplus
  5. }
  6. #endif
 
    3、还有一个是dlsym函数指针的转换问题,dlsym返回的是一个对象的指针,转为函数指针要采用   “cmd=(int (*)(这里要填写你定义cmd时的参数类型))dlsym
阅读(2161) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

☆彼岸★花开2011-12-01 00:14:14

kangle000: 第一个是找不到动态库的路径,第二个是c和C++函数编译之后对应的签名不同.....
恩,谢指教,这些问题好烦人那

kangle0002011-11-23 20:21:46

☆彼岸★花开: 为什么会出现这些问题呢?.....
第一个是找不到动态库的路径,第二个是c和C++函数编译之后对应的签名不同

☆彼岸★花开2011-11-19 19:14:16

为什么会出现这些问题呢?