如果lt_dlopen失败,如何获取更多信息

How to get more info if lt_dlopen fails?

本文关键字:获取 信息 何获取 lt dlopen 失败 如果      更新时间:2023-10-16

我正在调用lt_dlopen,并得到一个未找到的通用文件错误(已翻译的errno文本)。我如何才能获得更多关于实际失败的信息,因为文件肯定在那里。

这是一个加载C++库的C++程序。在同一个程序中,我使用相同的命令打开其他库而不会出现问题,因此我担心它可能是这个库特有的。我使用了ldd,并且满足了库的所有依赖项。

我偶然发现了一种有效的东西:

export LD_DEBUG=all

然后继续筛选输出的极端质量。在这种情况下,我发现了一个"查找错误",其中一个符号无法解决。我不知道为什么,但这可能与这个问题无关。

用$CFLAGS中的"-DLT_DEBUG_LOADERS"重新编译libtool。调整LD_LIBRARY_PATH,以便您的程序找到此调试libltdl.so,而不是系统的。ltdl的调试版本将为每个加载程序打开目标的尝试打印显式错误,其详细程度远低于LD_debug=all。

来源http://www.delorie.com/gnu/docs/libtool/libtool_46.html:

Function: lt_dlhandle lt_dlopen (const char *filename)

[…]如果lt_dlopen由于任何原因失败,它将返回NULL。

Function: const char * lt_dlerror (void)

返回一个人类可读的字符串,描述最近的错误发生在libltdl的任何函数中。如果没有错误,则返回NULL自初始化或上次调用后发生。