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

乔伊·大(Joey Big):

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

我正在尝试通过以下方式做到这一点:

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

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

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

安东·科瓦连科(Anton Kovalenko):

最有可能libCamera.so使用共享库中定义的符号,而不依赖于该库。

  1. 找到元凶。拿一个真正的可执行文件链接libCamera.so(并起作用)。用列出其依赖项ldd /path/to/executable其中应是有一个定义库ZTVN10_cxxabiv117__class_type_infoE(使用grep选择可能的候选人,nm -D对库,以确保)。该库将不在所示的列表中ldd ./libCamera.so

  2. 解决问题。首先加载在步骤1中找到的库dlopen(也可以RTLD_GLOBAL在此处使用)。

  3. 如果另一个符号有问题,请转到步骤1。

  4. 如果新添加的库也存在相同的问题,请转到步骤1。

  5. 告诉图书馆作者,请修正他们的链接。

还可能发生其中的先决条件之一ldd ./libCamera.so升级并丢失了符号定义的情况(也许是使用名称不同的编译器进行了重新编译)。然后,你不会找到在步骤1中的罪魁祸首,并没有解决办法,但降级的东西一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用dlopen时,有关“未定义符号”的共享库错误

使用dlopen访问CMake生成的动态库

dlopen-未定义的符号错误

使用 dlopen 加载动态库时抛出未定义的符号

使用Selenium的while函数循环会引发错误NameError:未定义名称'neadaclick'

使用介子构建 gobject 库会导致未定义的符号

使用iOS SDK创建NativeScript插件会导致“架构的未定义符号”错误

使用共享库未定义符号的Linux共享库

导入错误:使用 SWIG 时 _...so 文件中的未定义符号

在Android上构建的Git引发“对dlopen的未定义引用”错误

使用xcode使用C创建静态库,错误:“体系结构i386的未定义符号”!

当我不使用库时,为什么编译器会给我错误“未定义的外部符号”?

使用 MUI ThemeProvider 会导致“未定义”错误

使用来自 C 库的损坏符号的 C++ 程序导致未定义符号

将React与Nashorn一起使用会引发“ ReferenceError:“控制台”未定义”

为什么在功能中使用此对象会导致Javascript TypeError(未定义)引发?

意外的结果:为什么访问未定义的变量不会引发错误?

Aurelia repeat.for使用自定义元素引发未定义的错误

dlopen 未定义的引用

Linux C ++错误:未定义对“ dlopen”的引用

使用Boost / Python的未定义符号

访问从str_split()返回的数组会抛出未定义的偏移量错误

Active Record回调在使用STI的类中的生产中引发“未定义的方法”错误

在webpack-simple配置中使用async / await引发错误:未定义RegeneratorRuntime

python lambda使用多个参数引发未定义的变量错误

Webpack 4在使用未定义函数时不会引发编译错误

从备用路径导入共享对象时,为什么python会引发未定义的符号错误?

访问useRef中的任何元素都将引发“未定义”

在C ++中使用内联方法时出现未定义的符号错误