【问题标题】:symbol lookup error: ./executableName: undefined symbol: _ZN18QXmlDefaultHandlerC2Ev符号查找错误:./executableName:未定义符号:_ZN18QXmlDefaultHandlerC2Ev
【发布时间】:2014-10-02 03:48:45
【问题描述】:

我正在尝试在 Linux Mint 16 x64 上运行为 Ubuntu 12 x64 编译的可执行文件。 可执行文件在运行时动态使用 Qt 5.1.1。我得到了错误:

loaded the dummy plugin 
loaded the Linux plugin 
updating server status 
./executableName: symbol lookup error: ./executableName: undefined symbol: _ZN18QXmlDefaultHandlerC2Ev

当我跑步时

ldd executableName | grep "not found"

搜索缺少的依赖项我没有得到任何结果;所有动态依赖似乎都找到了,但是上面的未定义符号错误仍然存​​在。

想法?

【问题讨论】:

    标签: linux qt linker shared-libraries symbol-table


    【解决方案1】:

    快速帮助:

    $ echo _ZN18QXmlDefaultHandlerC2Ev|c++filt
    QXmlDefaultHandler::QXmlDefaultHandler()
    

    因此,您没有QXmlDefaultHandler 的构造函数。谷歌搜索我们可以在这里找到,至少 Qt-4.8 和 Qt-5.3 包含这个库。

    我认为,您实际运行的 Qt 库与编译可执行文件所针对的库之间存在某种类型的不兼容。我的建议是从源代码重新编译该可执行文件,在你的薄荷糖上。

    从 ubuntu 移植源码包对你来说有点困难,这不是不可能的,在这种情况下,我建议一个简单的上游源码重新编译(或者甚至二进制下载,如果有的话)。

    【讨论】:

    • @peterh:我有一个类似的问题,将tsk_img_open_sing 库的tsk_img_open_sing 函数称为undefined symbol。我已经包含了libtsk.hecho tsk_img_open_sing|c++filt,输出为tsk_img_open_sing。为什么会这样?
    • @Jackz c++filt 只需要将神秘的 c++ 函数名转换为它们的 c++ 形式(普通二进制文件不能有 X::~X() 和类似的函数名,这就是它的原因需要。)。但这是一个 C 函数,因此不需要 c++filt。 nm --dynamic /path/to/sleuthkit.so 表示该库导出了哪些函数名称,您的 sleuthkit.so 必须包含该名称。如果不是,则说明您的 sleuthkit 有问题。如果还没有,那么您的编译器可能无法以某种方式找到这个 sleuthkit 库。
    • @Jackz 如果你在一个新问题中提出这个问题,然后在评论中将我介绍给这里,那就更好了。所以我可以写一个明确的答案,你可以投票给我。 :-)
    【解决方案2】:

    你不能像那样在 Mint 上运行 Ubuntu 二进制文件;二进制文件在发行版之间通常不是二进制兼容的。你能找到一个 Mint 版本吗?如果没有,您将不得不自己构建它。

    【讨论】:

    • “二进制文件在发行版之间通常不是二进制兼容的”:这通常不正确。我定期运行在其他发行版上编译的二进制文件 - 如果存在正确版本的正确库,可执行文件通常可以毫无问题地工作......
    • 我同意为基于 Fedora 的操作系统编译的东西在 Debian 上可能无法执行,但考虑到 Mint 是fork off of Ubuntu,通常可以诱使 Ubuntu 二进制文件执行。我确实同意,如果我有特定问题的来源,那么为 Mint 构建将是一个更好的解决方案。
    • 是的,但是 Mint 和 Ubuntu 最大的区别在于 Mint 是基于 KDE 的。可能它有自己的 Qt 发行版,与 Ubuntu 有很大不同(例如,它的一些 Qt 帮助库分布在单独的包中)。
    猜你喜欢
    • 2012-06-19
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多