3

我正在调用lt_dlopen并得到一个通用文件未找到错误(翻译的 errno 文本)。我怎样才能获得有关实际失败的更多信息,因为该文件肯定存在。

这是一个加载 C++ 库的 C++ 程序。在同一个程序的其他地方,我使用相同的命令毫无问题地打开其他库,因此我担心它可能是这个库特有的东西。我已经使用ldd并满足了库的所有这些依赖项。

4

3 回答 3

5

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

export LD_DEBUG=all

然后继续筛选极大量的输出。在这种情况下,我发现了一个“查找错误”,其中一个符号无法解析。我不确定为什么,但这可能与这个问题无关。

于 2012-03-05T13:20:30.493 回答
0

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

于 2015-11-29T02:30:52.580 回答
-1

来自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。

于 2012-03-05T12:53:34.343 回答