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

时间:2013-03-05 21:18:06

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

我正在尝试使用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 to 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: undefined reference to 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|undefined reference to 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|undefined reference to GetTextExtentPoint32W @ 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

中的构建选项

先感谢您的帮助:))

3 个答案:

答案 0 :(得分:4)

好吧,我终于成功了:)

如果像我一样,有人想在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. 打开Code :: Blocks

  5. 创建一个新的控制台项目,或者如果您已经有一个控制台项目(并计划向其添加一个wxWidgets GUI),请将其打开
  6. 右键单击项目>构建选项
  7. 我用于Debug构建的
  8. Here are the build optionsCode::Blocks build options for wxWidgets
  9. 构建&运行
  10. 除了wx / wx.h

    之外,还应该包括[编辑] wx / app.h
    #include <wx/wx.h>
    #include <wx/app.h>
    

答案 1 :(得分: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 lib。看起来对我合情合理。您的日志中至少定义了missing functions

答案 2 :(得分:0)

我发现最好的方法是在你的&#34;其他班轮选项中添加``wx-config --libs all`&#34; ,就此而言,许多问题都将消失。

wxconfig screen shot