gpt4 book ai didi

linux - 使用 dlopen() 访问 .so 库会抛出 undefined symbol 错误

转载 作者:IT王子 更新时间:2023-10-28 23:56:25 24 4
gpt4 key购买 nike

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

我试图通过以下方式做到这一点:

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

但是这失败了,我收到以下输出: “无法打开文件:libCamera.so: undefined symbol :ZTVN10_cxxabiv117__class_type_infoE”

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

最佳答案

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

  1. 找到罪魁祸首。获取链接到 libCamera.so 的真实可执行文件(它可以运行)。使用 ldd/path/to/executable 列出其依赖项。其中应该有一个定义了 ZTVN10_cxxabiv117__class_type_infoE 的库(使用 grep 来选择可能的候选对象,在库上使用 nm -D 以确保).该库不会ldd ./libCamera.so 显示的列表中。

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

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

  4. 如果新添加的库也有同样的问题,转到步骤1。

  5. 告诉库作者请修复他们的链接。

也可能发生 ldd ./libCamera.so 中的先决条件之一被升级并丢失了符号定义(也许它是用一个以不同方式进行名称修改的编译器重新编译的)。那么您将找不到第 1 步中的罪魁祸首,并且没有解决方案,只能再次降级某些东西

关于linux - 使用 dlopen() 访问 .so 库会抛出 undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com