相关疑难解决方法(0)

使用dlopen()访问.so库会抛出未定义的符号错误

我正在尝试将相机库.so文件动态加载到Linux可执行文件中以获得对简单相机功能的访问.

我试图这样做:

  if ( (newHandle = dlopen("./libCamera.so",RTLD_LAZY | RTLD_GLOBAL)) == NULL )
  {
     printf( "Could not open file : %s\n", dlerror() );   
     return 1;
  }
Run Code Online (Sandbox Code Playgroud)

但是这失败了,我收到以下输出:"无法打开文件:libCamera.so:未定义的符号:ZTVN10 _cxxabiv117__class_type_infoE"

我如何找出它所依赖的符号?

linux shared-libraries

11
推荐指数
3
解决办法
2万
查看次数

dlopen - 未定义的符号错误

我正在使用dlopen在运行时加载共享库

dlopen("SharedLibarary1.so", RTLD_NOW | RTLD_GLOBAL);
Run Code Online (Sandbox Code Playgroud)

在该共享对象中,我引用另一个共享库"SharedLibarary2.so"中定义的const char*.

Executable和两个库都是使用-rdynamic构建的.

但是在使用dlopen时我仍然遇到运行时错误:"/ usr/lib/SharedLibarary1.so:undefined symbol"并指向错位的const char*有未定义的符号.

Whith GDB"info share"我可以看到第二个库没有在错误点加载.

如果我在第一个库之前在第二个库上执行dlopen,那问题怎么会消失.

有没有更好的方法来强制加载器为未解析的符号加载第二个库?

c c++ linux shared-libraries dlopen

7
推荐指数
1
解决办法
1万
查看次数

共享库(.so)文件是否需要在链接时显示(或指定)?

共享库(.so)文件是否需要在链接时显示(或指定)?

我在这里已经读到了(共享对象(.so),静态库(.a)和DLL(.so)之间的区别?),. so文件必须在编译时出现,但是根据我的经验,这不是真的吗?

共享库不是仅在运行时使用dlopen和链接dlsym,以便在链接应用程序时该库可能不存在于系统上吗?

c++ dll shared-libraries

6
推荐指数
1
解决办法
2248
查看次数

标签 统计

shared-libraries ×3

c++ ×2

linux ×2

c ×1

dll ×1

dlopen ×1