4

我正在尝试使用 Code::Blocks 12.11 构建这个 wxWidgets 示例程序,但无论我尝试什么,构建都会失败。

例如,构建日志显示如下(项目位于 X:\programming\c++\HelloWxWidgets 下):

mingw32-g++.exe -Wall -fexceptions -g -D_ GNUWIN32 _ -D_ WXMSW _ -DwxUSE_UNICODE -D_ WXDEBUG _ -IC :\libraries\wxWidgets-2.8.12.01\include -IC:\libraries\wxWidgets-2.8.12.01\ contrib\include -IC:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\mswud -c X:\programming\c++\HelloWxWidgets\hworld2.cpp -o obj\Debug2\hworld2.o mingw32-g++.exe -LC :\libraries\wxWidgets-2.8.12.01\lib\gcc_lib -o bin\Debug2\HelloWxWidgets.exe obj\Debug2\hworld2.o -static-libgcc C:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\libwxmsw28ud。 a C:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\libwxmsw28ud.a(monolib_window.o): 在函数ZN8wxWindow6UpdateEv': C:\BuildAgent\work\wxPack\wxwidgets\build\msw/../../src/msw/window.cpp:1643: undefined reference toGdiFlush@0' C:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\libwxmsw28ud.a( monolib_window.o): 在函数中ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont': C:\BuildAgent\work\wxPack\wxwidgets\build\msw/../../src/msw/window.cpp:2132: undefined reference toGetTextExtentPoint32W@16' C:\BuildAgent\work\wxPack\wxwidgets\build\msw/../../src/msw/window.cpp:2133:未定义对“GetTextMetricsW@8”的引用

这些是我得到的一些构建信息

C:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\libwxmsw28ud.a(monolib_window.o)||在函数ZN8wxWindow6UpdateEv':| C:\BuildAgent\work\wxPack\wxwidgets\build\msw\..\..\src\msw\window.cpp|1643|undefined reference toGdiFlush@0'| C:\libraries\wxWidgets-2.8.12.01\lib\gcc_lib\libwxmsw28ud.a(monolib_window.o)||在函数ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont':| C:\BuildAgent\work\wxPack\wxwidgets\build\msw\..\..\src\msw\window.cpp|2132|undefined reference toGetTextExtentPoint32W@16'| C:\BuildAgent\work\wxPack\wxwidgets\build\msw....\src\msw\window.cpp|2133|未定义对`GetTextMetricsW@8'的引用|

这是完整的构建日志和所有构建消息(顺便说一下,我没有 C:\BuildAgent 目录)

我正在使用wxPack 2.8.12 (安装在 C:\libraries\wxWidgets-2.8.12.01 中)和 GCC 4.7.2(使用mingw-get与 C:\mingw 中的 Code::Blocks 分开安装)

以下是 Code::Blocks 中的构建选项

提前感谢您的帮助:)

4

3 回答 3

4

好吧,我终于设法让它工作了:)

如果像我一样,有人想在 Code::Blocks 下的(最初)控制台项目中使用 wxWidgets,我将在此处发布要遵循的过程。有了这个,任何人都应该能够在 Wind0ws 环境中构建/运行至少这个示例代码:

  1. 我假设 Code::Blocks 和 MinGW 设置正确。
  2. 从http://www.wxwidgets.org/downloads/下载/安装 wxMSW (在我的情况下,我下载了 wxMSW-2.8.12-Setup.exe 并将其安装在 C:\libraries\wxWidgets-2.8.12 中)
  3. 打开命令提示符,需要构建 wxWidgets,我将以使用 unicode 的静态链接、整体、调试构建为例(更多信息在这里):

    cd /DC:\libraries\wxWidgets-2.8.12\build\msw

    mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=1 UNICODE=1

    :(mingw32-make 需要一些时间来构建库)

  4. 打开代码::块

  5. 创建一个新的控制台项目,或者如果您已经有一个控制台项目(并且您计划向其中添加一个 wxWidgets GUI)打开它
  6. 右键单击项目>构建选项
  7. 以下是我用于 Debug 构建的构建选项。 Code::Blocks wxWidgets 的构建选项
  8. 构建和运行

[编辑] 除了 wx/wx.h 之外,还应包含 wx/app.h

#include <wx/wx.h>
#include <wx/app.h>
于 2013-03-06T00:35:54.300 回答
0

您可能需要将以下库添加到链接器设置(我从 VS 2012 中获取了列表,但对于 GCC 应该是相同的,您需要添加 -luuid -luser32 .... 到链接器高级选项)

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

UPD:可以看到 taht chris 建议添加 gdi32 库。对我来说看起来很合理。至少在那里定义了日志中缺少的功能。

于 2013-03-05T21:25:42.680 回答
0

我发现一个最好的方法是在你的“其他衬里选项”中添加“wx-config --libs all”,在这个问题上,很多问题都会消失。

wxconfig 屏幕截图

于 2017-10-11T02:54:50.677 回答