我正在尝试将相机库.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”
我如何找出它所依赖的符号?
最有可能libCamera.so
使用共享库中定义的符号,而不依赖于该库。
找到元凶。拿一个真正的可执行文件链接libCamera.so
(并起作用)。用列出其依赖项ldd /path/to/executable
。其中应是有一个定义库ZTVN10_cxxabiv117__class_type_infoE
(使用grep
选择可能的候选人,nm -D
对库,以确保)。该库将不在所示的列表中ldd ./libCamera.so
。
解决问题。首先加载在步骤1中找到的库dlopen
(也可以RTLD_GLOBAL
在此处使用)。
如果另一个符号有问题,请转到步骤1。
如果新添加的库也存在相同的问题,请转到步骤1。
告诉图书馆作者,请修正他们的链接。
还可能发生其中的先决条件之一ldd ./libCamera.so
升级并丢失了符号定义的情况(也许是使用名称不同的编译器进行了重新编译)。然后,你不会找到在步骤1中的罪魁祸首,并没有解决办法,但降级的东西一次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句