【问题标题】:How to get more info if lt_dlopen fails?如果 lt_dlopen 失败,如何获取更多信息?
【发布时间】:2012-03-05 12:43:23
【问题描述】:

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

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

【问题讨论】:

  • 你可以strace你的程序...
  • strace 没有显示任何可能表明存在问题的内容。
  • 你也可以使用ltrace。您确定 lt_dlopen 传递了 *.so 文件的完整绝对路径吗?请与file 联系。

标签: c++ linux gcc libtool


【解决方案1】:

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

export LD_DEBUG=all

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

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

    来自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 自初始化或自上次调用以来已发生。

    【讨论】:

    • 该消息也只是“找不到文件”
    • 好吧,我希望能从中得到更多,但由于您提供的信息很少,我只能猜测。它没有工作......
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多