我已经尝试了从 wxWiki 到 chatGPT 的所有方法,但没有任何方法可以解决我的问题,请注意,我不需要替代解决方案,并且想了解我在此实现中缺少的内容。
我遵循的步骤,
第 1 步:使用 mingw-builds-binaries 在我的 Windows 11 x64 处理器上安装 mingw64。我选择了 发布 13.2.0-rt_v11-rev1
x86_64-13.2.0-release-win32-seh-ucrt-rt_v11-rev1.7z
版本。
Step2: 创建项目文件夹
myWxProject
[%project%]
, %project%/libs/wxWidgets
[%wxWidgets%]
.
第 3 步:从 Windows 7z v3.235 下载 wxWidgets 源文件。将文件解压到
%wxWidgets%
。
第 4 步:使用 gcc make 构建文件,进入
%wxWidgets%/build/msw/
并运行命令 mingw32-make -f makefile.gcc BUILD=release SHARED=0 UNICODE=1
请注意,即使下一个选项 BUILD=debug
对 include 进行了必要的更改,仍然会给出错误。
第 5 步:添加 VSCode 配置
c_cpp_properties.json
至 %project%/.vscode/
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}\\libs\\wxWidgets\\include",
"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswu"
],
"defines": [
"_DEBUG",
"UNICODE",
"__WXMSW"
],
"intelliSenseMode": "gcc-x64",
"compilerPath": "C:\\mingw64\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
和
tasks.json
到%project/.vscode/%
{
"version": "2.0.0",
"tasks": [
{
"label": "cpp-build-debug",
"type": "shell",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${workspaceFolder}\\cpp-build-debug\\${fileBasenameNoExtension}.exe",
"-I",
"${workspaceFolder}\\libs/wxWidgets\\include",
"${workspaceFolder}\\libs/wxWidgets\\lib\\gcc_lib\\mswu",
"-L",
"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib",
"-lwxbase32u",
"-lwxmsw32u_core",
"-lwxmsw32u_adv"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
}
]
}
helloWorld.cpp
并在其中包含 简单的 wxWidgets 示例代码。// Start of wxWidgets "Hello World" Program
#include <wx/wx.h>
class MyApp : public wxApp
{
public:
bool OnInit() override;
};
wxIMPLEMENT_APP(MyApp);
class MyFrame : public wxFrame
{
public:
MyFrame();
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
};
enum
{
ID_Hello = 1
};
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame();
frame->Show(true);
return true;
}
MyFrame::MyFrame()
: wxFrame(nullptr, wxID_ANY, "Hello World")
{
wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
"Help string shown in status bar for this menu item");
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT);
wxMenu *menuHelp = new wxMenu;
menuHelp->Append(wxID_ABOUT);
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, "&File");
menuBar->Append(menuHelp, "&Help");
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText("Welcome to wxWidgets!");
Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox("This is a wxWidgets Hello World example",
"About Hello World", wxOK | wxICON_INFORMATION);
}
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}
cpp-build-debug
任务。错误
In file included from %project%\libs/wxWidgets\include/wx/defs.h:45,
from %project%\libs/wxWidgets\include/wx/wx.h:14,
from %project%\helloWorld.cpp:2:
%project%\libs/wxWidgets\include/wx/platform.h:159:10: fatal error: wx/setup.h: No such file or directory
159 | #include "wx/setup.h"
| ^~~~~~~~~~~~
compilation terminated.
我确信的事情: 我可以确保目录中有一个名为 setup.h 的文件
%wxWidgets%/lib/gcc_lib/mswu/wx/
但即使该文件夹位于 include 中也找不到它。我注意到一些奇怪的事情,源代码的提取里面有一个文件夹,其中包含 %wxWidgets%/include/msvc
,其中还包含 wx
文件夹和 setup.h
,如果我从这个 wiki 理解正确的话,这个文件是针对视觉工作室的构建设置,因此我不会使用它。在过去的几天里,我确实尝试了我想到的一切,但我一生都无法弄清楚为什么它会给我这个setup.h
错误。
我希望这些信息足够了。如果您想要我的系统中的确切文件,我可以提供我的项目的整个构建文件夹,但由于它很大,我现在没有包含它。
[编辑] 附加信息:
从示例编译
minimal
程序时,我遇到了同样的问题。这是在导航到最小示例文件夹后再次由 gcc-make mingw32-make -f makefile.gcc
构建的。
我可以在你的配置文件中看到 2 个错误(不确定它会解决你的问题,但谁知道......):
"defines": [
"_DEBUG",
"UNICODE",
"__WXMSW"
],...
应该是:
"defines": [
"_DEBUG",
"UNICODE",
"__WXMSW__"
],
如果您使用的是库的调试版本,则包含路径不是:
"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswu"
但是
"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswud"