【问题标题】:Qt 4.1.4 Source Compile on Windows with MinGW使用 MinGW 在 Windows 上编译 Qt 4.1.4 源代码
【发布时间】:2010-10-08 08:17:26
【问题描述】:

我在编译 Qt 框架版本 4.1.4 的源代码时遇到问题。 (有关确切的编译器错误文本,请参见附图)

我正在使用这个 Qt 源 (http://get.qt.nokia.com/qt/source/qt-win-opensource-src-4.1.4.zip)

我正在使用具有 GCC 版本 4.5.0.1 的 MinGW(最新来自这里 http://sourceforge.net/projects/mingw/files/

在我看来,qatomic.h 和 GCC 包括 winbase.h 中的一些函数原型似乎不同,这可能是由于 Qt 4.1.4 有点旧。

谁能告诉我如何解决这个问题? 通过更改 MinGW 版本?还是其他一些环境设置?

如果有人过去已经用 MinGW 成功编译过 Qt 4.1.4 那就太好了,那么请告诉我使用的是哪个版本的 MinGW 和 GCC?


编译器输出:

D:\Qt\qt-win-opensource-src-4.1.4>mingw32-make

cd src && mingw32-make -f Makefile

mingw32-make[1]: Entering directory `D:/Qt/qt-win-opensource-src-4.1.4/src'
cd winmain && mingw32-make -f Makefile

mingw32-make[2]: Entering directory `D:/Qt/qt-win-opensource-src-4.1.4/src/winma
in'

mingw32-make -f Makefile.Debug all

mingw32-make[3]: Entering directory `D:/Qt/qt-win-opensource-src-4.1.4/src/winma
in'

g++ -c -g -g -Wall -frtti -fexceptions -DQT_THREAD_SUPPORT -DUNICODE -DQT_LARGEF
ILE_SUPPORT -DQT_NEEDS_QMAIN -DQT_NO_CAST_TO_ASCII -DQT3_SUPPORT -DQT_MOC_COMPAT
 -I"D:/Qt/qt-win-opensource-src-4.1.4/include" -I"tmp" -I"D:/Qt/qt-win-opensourc
e-src-4.1.4/include/QtCore" -I"d:\Qt\qt-win-opensource-src-4.1.4\include\qtmain"
 -I"tmp" -I"D:/Qt/qt-win-opensource-src-4.1.4/include/ActiveQt" -I"tmp\moc\debug
_shared" -I"." -I"..\..\mkspecs\win32-g++" -o tmp\obj\debug_shared\qtmain_win.o
qtmain_win.cpp

In file included from D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/arch/qato
mic.h:1:0,

                 from D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/../../src
/corelib/thread/qatomic.h:31,

                 from D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/qatomic.h
:1,

                 from D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/../../src
/corelib/tools/qbytearray.h:28,

                 from D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/qbytearra
y.h:1,
                 from qtmain_win.cpp:25:

D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/arch/../../../src/corelib/arch/
windows/arch/qatomic.h:154:87: error: declaration of C function 'long int Interl
ockedCompareExchange(long int*, long int, long int)' conflicts with

c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/winbase.h:1689:13: err
or: previous declaration 'LONG InterlockedCompareExchange(volatile LONG*, LONG,
LONG)' here

D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/arch/../../../src/corelib/arch/
windows/arch/qatomic.h:155:69: error: declaration of C function 'long int Interl
ockedIncrement(long int*)' conflicts with

c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/winbase.h:1702:13: err
or: previous declaration 'LONG InterlockedIncrement(volatile LONG*)' here
D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/arch/../../../src/corelib/arch/
windows/arch/qatomic.h:156:69: error: declaration of C function 'long int Interl
ockedDecrement(long int*)' conflicts with

c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/winbase.h:1693:13: err
or: previous declaration 'LONG InterlockedDecrement(volatile LONG*)' here

D:/Qt/qt-win-opensource-src-4.1.4/include/QtCore/arch/../../../src/corelib/arch/
windows/arch/qatomic.h:157:74: error: declaration of C function 'long int Interl
ockedExchange(long int*, long int)' conflicts with

c:\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/winbase.h:1694:13: err
or: previous declaration 'LONG InterlockedExchange(volatile LONG*, LONG)' here

mingw32-make[3]: *** [tmp\obj\debug_shared\qtmain_win.o] Error 1

mingw32-make[3]: Leaving directory `D:/Qt/qt-win-opensource-src-4.1.4/src/winmai
n'

mingw32-make[2]: *** [debug-all] Error 2

mingw32-make[2]: Leaving directory `D:/Qt/qt-win-opensource-src-4.1.4/src/winmai
n'

mingw32-make[1]: *** [sub-winmain-make_default-ordered] Error 2

mingw32-make[1]: Leaving directory `D:/Qt/qt-win-opensource-src-4.1.4/src'

mingw32-make: *** [sub-src-make_default-ordered] Error 2   

【问题讨论】:

  • 你介意我问你为什么使用 4.1 吗?您的应用程序不能在更高版本的 qt 上运行吗?
  • 我正在处理一个与 QT4.6 存在性能问题的项目(截至目前),我们需要正确移植代码并更改某些部分以使工具与 QT4.6 一起正常工作,但是计划在项目的后期发布。所以到目前为止我坚持使用 QT 4.1.4。

标签: windows qt mingw


【解决方案1】:

看起来您为 Qt 复制了包含。编译时从包含路径中排除 C:\mingw\lib\gcc\mingw32\4.5.0

【讨论】:

  • 是的,你可能是对的,但我如何排除“mingw include”路径?这并不是说我不知道​​如何编辑 makefile,而是我有源包和配置器来生成 makefile,我希望它可以在不修补 makefile 的情况下工作。另一个问题是,我有点确定,如果我现在在编译的后期阶段从 makefile 中排除 mingw 路径,它肯定会抱怨它期望从“mingw include”中找到的缺少头文件
  • 我不确定 Qt 4.1 是否与 mingw4 兼容,对于这样的旧版本,您需要 mingw3。我不确定,但 Qt 在 Qt 4.5 附近获得了 mingw4 兼容性
  • 你好,Kamil,谢谢!,我想我应该尝试使用旧版本的 mingw。
  • 我发现 Qt 是用 mingw 编译的(也是旧包):ftp.icm.edu.pl/packages/qt/source
【解决方案2】:

谢谢你,但我已经解决了,我们组织有 QT 许可证,我已经用 vc++ 编译器编译了源代码的商业版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多