在Code::Blocks中构建一个wxWidgets程序

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: 未定义对 "GdiFlush@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: 未定义对 "GetTextExtentPoint32W@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|未定义的引用GdiFlush@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|未定义的引用GetTextExtentPoint32W@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(单独从Code :: Blocks安装在C:\ mingw中,使用mingw-get)。
以下是Code :: Blocks的构建选项。

非常感谢您的帮助 :)


这些函数定义在 gdi32.lib 中。 - chris
是的。听起来好像没有链接gdi32库。请确保在适当的构建设置中列出了它及其目录。(应该有一个包含要包括的库和搜索路径的列表。) - cHao
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 /D C:\libraries\wxWidgets-2.8.12\build\msw

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

    :(mingw32-make会花费一些时间来构建库)

  4. 打开Code::Blocks

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

[编辑]需要包含wx/wx.h以及wx/app.h

#include <wx/wx.h>
#include <wx/app.h>

或者只需使用“-mwindows”链接器标志。但这样你就失去了终端窗口,这对于调试很有帮助。你也可以组合使用“-mwindows -mconsole”。 - user877329

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

更新: 可以看到Chris建议添加gdi32库。 这对我来说是合理的。至少您日志中的 missing functions 在其中定义。


我已经在链接器设置中添加了库,但仍然出现相同的错误。 - maddouri
这些库应该在链接器命令行中排在wx库之后。请确保wx库先出现,然后是wx库所依赖的库。另外,您是否尝试使用Code::Blocks内置的wxWidgets项目模板创建wxWidgets项目,并检查新项目的链接器设置? - T-Rex
我使用Code::Blocks内置的wxWidgets项目模板创建了另一个项目:它可以编译通过,但应用程序会崩溃(没有显示任何窗口,并且在启动后立即返回(Process terminated with status -1073741819 (0 minutes, 8 seconds) ))。 - maddouri
你尝试过以下方法吗?1)使用Code::Blocks自带的预构建版本wxWidgets?2)清理wx库并从头开始重新构建?3)从Windows资源管理器中运行应用程序,并检查是否会产生一些有意义的错误消息?4)使用Dependency Walker打开可执行文件,并检查应用程序引用的DLL是否缺失?可能需要将mingwm10.dll放入某个可从PATH环境变量访问的文件夹中(或将其放在EXE文件附近)。https://www.google.com.ua/search?q=mingwm10.dll%20wxWidgets - T-Rex
你确定你正在使用 wxWidgets 的单体构建吗?我的意思是,你只有一个名为 wxmsw28 的库,而不是一组专门的库,如 wxbase28、wxmsw28_core、wxmsw28_adv 等等?此外,你能否检查一下你是否正在使用 wx 的 Unicode 构建版本?我可以看到编译器有 -DwxUSE_UNICODE 宏,但在这种情况下,你的库名称应该带有 u 后缀,据我所知,应该像 wxmsw28u 这样。 - T-Rex
显示剩余2条评论

0

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

wxconfig截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接