【问题标题】:Building a wxWidgets program in Code::Blocks在 Code::Blocks 中构建 wxWidgets 程序
【发布时间】:2013-02-20 11:21:42
【问题描述】:

我正在尝试使用 Code::Blocks 12.11 构建 this wxWidgets sample program,但无论我尝试什么,构建都会失败。

例如构建日志显示如下(项目在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'的引用|

这里是完整的build log 和所有的build messages(顺便说一下,我没有 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 中的构建选项

提前感谢您的帮助:)

【问题讨论】:

  • 那些函数定义在gdi32.lib中。
  • 是的。听起来 gdi32 没有被链接。确保它及其目录列在适当的构建设置中。 (应该有一个要包含的库列表和搜索它们的路径。)

标签: c++ mingw wxwidgets linker-errors codeblocks


【解决方案1】:

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

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

  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 的静态链接、单体、调试构建为例(更多信息 here):

    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. 开放代码::块

  5. 创建一个新的控制台项目,或者如果您已经有一个控制台项目(并且您计划向其中添加 wxWidgets GUI)打开它
  6. 右键单击项目>构建选项
  7. 我用于调试构建的Here are the build options
  8. 构建并运行

[编辑] wx/app.h 应该包含在 wx/wx.h 之外

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

【讨论】:

  • 或者只是-mwindows链接器标志。但是随后您松开了终端窗口,这有利于调试。你也可以结合-mwindows -mconsole
【解决方案2】:

您可能需要将以下库添加到链接器设置(我从 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: 可以看到 chris 建议添加 gdi32 库。对我来说看起来很合理。至少在您的日志中定义了missing functions

【讨论】:

  • 我在linker settings 中添加了库,但仍然遇到相同的错误。
  • 这些库应该列在链接器命令行中的 wx 库之后。请确保 wx 库首先出现,然后是 wx 库所依赖的库。您是否也尝试过使用 Code::Blocks 内置 wxWidgets 项目模板创建 wxWidgets 项目并检查新项目的链接器设置?
  • 我使用 Code::Blocks 内置 wxWidgets 项目模板创建了另一个项目:它构建没有错误,但应用程序崩溃(不显示任何窗口,启动后立即返回(进程以状态终止-1073741819(0分8秒))
  • 您是否尝试过:1) 使用 Code::Blocks 附带的 wxWidgets 的预构建版本? 2) 清理 wx 库并从头开始重建? 3) 从 Windows 资源管理器运行您的应用程序并检查它是否产生一些有意义的错误消息? 4) 使用 Dependency Walker 打开可执行文件并检查是否缺少应用引用的 DLL?可能需要将 mingwm10.dll 放入某个文件夹,该文件夹可从 PATH 环境变量访问(或将其放在 EXE 文件附近)google.com.ua/search?q=mingwm10.dll%20wxWidgets
  • 再次感谢您的帮助。我厌倦了尝试谷歌搜索时发现的小技巧,所以我下载了 wx-config for windows 并将其添加到 PATH 中。我使用了内置 code::blocks wxWidgets 项目模板的确切设置。我只是将编译器设置>其他选项更改为wx-config --cxxflags,并在链接器设置>其他链接器选项中使用了wx-config --libs。现在我遇到了另一组问题。在这里您可以查看build logbuild messages
【解决方案3】:

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

wxconfig screen shot

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多