【问题标题】:Link QT 32Bit libraries with 64 Bit Application (MinGW64 compiler )?将 QT 32 位库与 64 位应用程序(MinGW64 编译器)链接?
【发布时间】:2010-11-10 01:26:05
【问题描述】:

大家好,

在我的应用程序中,我需要分配超过 4GB 内存地址空间的内存。所以我需要以 64 位编译我的应用程序。

我的开发环境是 QT 32 位库(LGPL),将使用 MinGW64 编译 64 位版本。 由于 QT 不支持 MinGW64(仅支持 32 位),我可以将 32 位 QT 库链接到我的 64 位应用程序吗?

提前致谢。

【问题讨论】:

    标签: c++ qt linker qt4 64-bit


    【解决方案1】:

    不,你不能。 64 位进程无法加载 32 位 DLL。

    【讨论】:

    • +1。如果您考虑一下,这是有道理的——如果/当您将 64 位指针交给它时,32 位代码会做什么;)
    • 我在我的应用程序数据结构中只使用 64 位指针。我不会干扰 32 QT 库。所以我虽然我的应用程序使用 64 位地址空间,但 32 位 QT 库只能使用 32 位地址空间。
    • @umanga: 还是不行,如果你想知道为什么,每个进程都有特定的 CPU 定义的结构,其中包括确定 CPU 处于什么模式(64 位/ 32 位)同时执行该进程。 dll只是在运行时将代码/数据加载到进程的地址空间中,应用程序只有一个地址空间,并且只能处于一种模式。
    • 嗯,从技术上讲,微软在从 Win16 切换到 Win32 时做了类似的事情(thunking)。说得委婉些,那是,但可以做到。然而,thunking 需要手动工作,而且将 Qt 移植到 64 位环境可能要容易得多 - 毕竟,它开源的。
    • @MSalters:是的,thunking 是一个可行的选择,但正如你提到的那样,它很丑陋,而且 IMO 通常是个坏主意。需要注意的一点是,Qt 不需要移植到 64 位,它已经可以正常工作了。 umanga 可能不得不自己编译它。我不知道他们是否还为 Windows 提供 64 位二进制文​​件。
    【解决方案2】:

    @umanga 我的回复没有回答您的问题,但它可能会详细说明您实际想要做什么——使用 MinGW-w64 构建 Qt 64 位库。

    正如 MSalters 所建议的,将 Qt 移植到 64 位环境可能更简单。此外,Qt 4.7 与当前的 MinGW-w64 兼容 99.99%。我今天早上自己尝试使用 MinGW-w64 构建 Qt 4.7(包括 Webkit,但不包括 Phonon)。

    您只需要修改一行 Qt 源代码即可成功构建 Qt。 my blog提供了详细的步骤——“毕竟,它开源的。”。

    【讨论】:

    • 嗨,pinyote。谢谢你的回答。事实上我在你的博客中问过这个问题:)
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 2012-01-02
    • 2010-12-28
    • 1970-01-01
    • 2012-04-21
    • 2020-11-25
    • 2020-02-12
    • 2016-05-17
    相关资源
    最近更新 更多