当前位置:  技术问答>linux和unix

dlopen加载so动态链接库出现段错误的问题

    来源: 互联网  发布时间:2017-01-30

    本文导语:  so库中暴露出来的函数(写在某基类头文件中)大体如下: …… #ifdef __cplusplus extern "C" { #endif     Object* construct() {         return new Object;     }     void destroy(Object* object) {         delete object;  ...

so库中暴露出来的函数(写在某基类头文件中)大体如下:
……
#ifdef __cplusplus
extern "C" {
#endif

    Object* construct() {
        return new Object;

    }

    void destroy(Object* object) {
        delete object;
    }

#ifdef __cplusplus
}
#endif
……

调用so的程序结构如下:
定义了一个函数(根据传入的so_name来执行相关操作):
void so_test(so_name, other_arg) {
   ……
   handle = dlopen(so_name, RTLD_LAZY);
   ……
   Type1* create = (Type1*)dlsym(handle, "construct");
   Type2* destroy = (Type2*)dlsym(handle, "destroy");
   ……
   Object* object = create();
   ……
   destroy(object );
   ……
   dlclose(handle);
}
在其它函数中调用如上函数,调用时有2种情况:
情况1(同一个函数中):
void func() {
   so_test(so_name, other_arg1);
   so_test(so_name, other_arg2);
}
情况2(在不同的函数中):
void func1() {
   so_test(so_name1, other_arg);
}
void func2() {
   so_test(so_name2, other_arg);
}

编译运行后,不管是哪一种情况,前一次调用so_test正常,后一次调用so_test就会出现段错误

弄了好几天都没弄好,快疯了,求大侠指点一下

|
也就是说你的函数so_test能成功调用一遍,在第二遍的时候出的问题?那么就应该和你的so没有关系啊!你不用so,直接把代码放在一起编译试试?

|
最基本的调试技术:GDB单步调试。

如果代码不多,请帖出全部代码,说不定还能帮你调试下!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux 动态库 dlopen
  • libdl.so这个库有什么用啊?dlopen等只能用于C接口吗?
  • dlopen的超难问题。也是g++和gcc的问题。
  • dlopen的难题
  • 请问在SCO Unix下, dlopen在哪个.a文件中
  • 编动态链接库时,提示 对‘dlopen’未定义的引用.
  • 请教关于dlopen,动态库连接程序的输出函数
  • dlopen出错。
  • 动态库dlopen时候:ELF file OS ABI invalid
  • Linux 动态库 dlopen()失败,errno = 17, File exists
  • dlopen 相关编译链接解惑
  • c程序调dlopen C++的动态库的问题,急!
  • dlopen 里面异常问题怎么解决?求助大家(RedHat AS 2.1 )
  • 在linux下(c++),如何动态调用 动态库(.so)? 为什么我编译报错:undefined reference to "dlopen"
  • dlopen函数问题
  • 用dlopen和dlsym得到的函数指针,在dlclose后还能继续使用么?
  • 请教:dlopen总是打不开动态库文件??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3