使用MinGW(gcc/g++)编译依赖wxWidgets的C++文件时出现编译错误求助
我之前一直用Visual Studio编译C文件,但现在想换成MinGW的gcc/g来编译。不过我对wxWidgets不太熟悉,尝试运行下面的编译命令时遇到了错误:
gcc main.cpp -I C:\wxWidgets-3.2.5\include\msvc -I C:\wxWidgets-3.2.5\include -L C:\wxWidgets-3.2.5\lib\vc_x64_lib -mwindows
错误信息如下:
In file included from C:\wxWidgets-3.2.5\include/wx/platform.h:159:0,
from C:\wxWidgets-3.2.5\include/wx/defs.h:45,
from C:\wxWidgets-3.2.5\include/wx/wx.h:14,
from main.cpp:1:
C:\wxWidgets-3.2.5\include\msvc/wx/setup.h:12:6: error: #error "This file should only be included when using Microsoft Visual C++"
#error "This file should only be included when using Microsoft Visual C++"
^~~~~
别担心,这个错误的原因很明确:你现在用的是专门给Visual Studio准备的wxWidgets头文件和库文件,和MinGW的gcc/g++完全不兼容!下面是具体的解决步骤:
第一步:获取MinGW版本的wxWidgets库
你当前指定的C:\wxWidgets-3.2.5\lib\vc_x64_lib是VC编译的库,MinGW需要专属的版本。两种方式可以获取:- 手动编译:打开MinGW的命令终端(比如MSYS2的shell,或者单独MinGW自带的命令行),进入wxWidgets的
build\msw目录(cd C:\wxWidgets-3.2.5\build\msw),运行编译命令,比如64位Release共享库的编译指令:
如果需要Debug版本,把mingw32-make -f makefile.gcc BUILD=release SHARED=1 UNICODE=1 TARGET_CPU=AMD64BUILD=release改成BUILD=debug即可。 - 下载预编译包:直接找和你的MinGW位数、编译器版本匹配的预编译wxWidgets包,省去编译的麻烦。
- 手动编译:打开MinGW的命令终端(比如MSYS2的shell,或者单独MinGW自带的命令行),进入wxWidgets的
第二步:修正编译命令的路径参数
把命令里的VC相关路径替换成MinGW对应的路径:- 删掉
-I C:\wxWidgets-3.2.5\include\msvc这个参数(这就是报错的根源,这个头文件只给VC用) - 库路径换成MinGW编译后的目录,比如
C:\wxWidgets-3.2.5\lib\gcc_x64_dll(具体名字根据你编译的配置调整) - 还要加上对应wxWidgets库的链接参数,比如
-lwxmsw32u_core -lwxbase32u(Debug版本要加_d后缀,比如wxmsw32u_core_d)
举个参考的正确编译命令:
g++ main.cpp -I C:\wxWidgets-3.2.5\include -L C:\wxWidgets-3.2.5\lib\gcc_x64_dll -lwxmsw32u_core -lwxbase32u -mwindows- 删掉
备注:内容来源于stack exchange,提问作者Udan Jayanith

