我正在调用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。