简体   繁体   English

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

[英]Building a wxWidgets program in Code::Blocks

I'm trying to build this wxWidgets sample program using Code::Blocks 12.11 but the build fails no matter what I try. 我正在尝试使用Code :: Blocks 12.11构建这个wxWidgets示例程序,但无论我尝试什么,构建都会失败。

For example, the build log shows the following (the project is under X:\\programming\\c++\\HelloWxWidgets): 例如,构建日志显示以下内容(项目位于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): In function 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): In function ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont': C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw/../../src/msw/window.cpp:2132: undefined reference to GetTextExtentP 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 GetTextExtentP的ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont': C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw/../../src/msw/window.cpp:2132: undefined reference to oint32W@16' C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw/../../src/msw/window.cpp:2133: undefined reference to `GetTextMetricsW@8' oint32W @ 16'C:\\ BuildAgent \\ work \\ wxPack \\ wxwidgets \\ build \\ msw /../../ src / msw / window.cpp:2133:未定义引用`GetTextMetricsW @ 8'

And these are some of the build messages that I get 这些是我得到的一些构建消息

C:\\libraries\\wxWidgets-2.8.12.01\\lib\\gcc_lib\\libwxmsw28ud.a(monolib_window.o)||In function ZN8wxWindow6UpdateEv':| C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw\\..\\..\\src\\msw\\window.cpp|1643|undefined reference to 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 ZN8wxWindow6UpdateEv':| C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw\\..\\..\\src\\msw\\window.cpp|1643|undefined reference to GdiFlush@0'| 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)||In function ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont':| C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw\\..\\..\\src\\msw\\window.cpp|2132|undefined reference to 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 ZNK8wxWindow13GetTextExtentERK8wxStringPiS3_S3_S3_PK6wxFont':| C:\\BuildAgent\\work\\wxPack\\wxwidgets\\build\\msw\\..\\..\\src\\msw\\window.cpp|2132|undefined reference to GetTextExtentPoint32W@16'| 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|undefined reference to `GetTextMetricsW@8'| C:\\ BuildAgent \\ work \\ wxPack \\ wxwidgets \\ build \\ msw .... \\ src \\ msw \\ window.cpp | 2133 |未定义引用`GetTextMetricsW @ 8'|

Here are the full build log and all of the build messages (by the way, I don't have a C:\\BuildAgent directory) 这是完整的构建日志和所有构建消息 (顺便说一下,我没有C:\\ BuildAgent目录)

I am using wxPack 2.8.12 (installed in C:\\libraries\\wxWidgets-2.8.12.01) and GCC 4.7.2 (installed separately from Code::Blocks in C:\\mingw using mingw-get ) 我使用的是wxPack 2.8.12 (安装在C:\\ libraries \\ wxWidgets-2.8.12.01)和GCC 4.7.2(使用mingw-get与C :: \\ mingw中的Code :: Blocks分开安装)

Here are the build options in Code::Blocks 以下是Code :: Blocks中的构建选项

Thank you in advance of your help :) 谢谢你的帮助:)

Alright, I finally managed to get it working :) 好吧,我终于设法让它工作:)

I'm posting here the procedure to follow if, like me, someone wanted to use wxWidgets in an (initially) console project under Code::Blocks. 如果像我一样,有人想在Code :: Blocks下的(最初)控制台项目中使用wxWidgets,那么我在这里发布要遵循的过程。 With this, anyone should be able to build/run at least this sample code in a Wind0ws environment: 有了这个,任何人都应该能够在Wind0ws环境中构建/运行至少这个示例代码

  1. I'll assume that Code::Blocks and MinGW are correctly setup. 我假设Code :: Blocks和MinGW设置正确。
  2. Download/Install wxMSW from http://www.wxwidgets.org/downloads/ (in my case, I downloaded wxMSW-2.8.12-Setup.exe and installed it in C:\\libraries\\wxWidgets-2.8.12) http://www.wxwidgets.org/downloads/下载/安装wxMSW(在我的情况下,我下载了wxMSW-2.8.12-Setup.exe并将其安装在C:\\ libraries \\ wxWidgets-2.8.12中)
  3. Open a command prompt, wxWidgets needs to be built, I'll take the exemple of a statically-linked, monolithic, debug build that uses unicode (more infos here ): 打开命令提示符,需要构建wxWidgets,我将以使用unicode的静态链接,单片调试构建为例( 此处有更多信息):

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

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

    :(mingw32-make will take some time to build the library) :(mingw32-make需要一些时间来构建库)

  4. Open Code::Blocks 打开Code :: Blocks

  5. Create a new console project , or if you already have a console project (and you plan to add a wxWidgets GUI to it) open it 创建一个新的控制台项目 ,或者如果您已经有一个控制台项目(并且您计划向其添加一个wxWidgets GUI),请将其打开
  6. Right-click on the project > Build options 右键单击项目>构建选项
  7. Here are the build options that I used for the Debug build. 以下是我用于Debug构建的构建选项 Code :: Blocks构建wxWidgets的选项
  8. Build & Run 建立和运行

[EDIT] wx/app.h should be included in addition to wx/wx.h 除了wx / wx.h之外,还应该包含[编辑] wx / app.h

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

You probably need to add following libs to linker settings (I took the list from VS 2012 but for GCC should be the same, you will need to add -luuid -luser32 .... to linker advanced options) 您可能需要将以下库添加到链接器设置(我从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 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: can see taht chris suggested to add gdi32 lib. UPD:可以看到taht chris建议添加gdi32 lib。 Looks reasonable for me. 看起来对我合情合理。 At least missing functions from your logs are defined there. 至少缺少日志中缺少的功能

I found a best way is that add ``wx-config --libs all` in your "other liner options" ,On this ,many issue will gone. 我发现一个最好的方法是在你的“其他班轮选项”中添加``wx-config --libs all`,在这个问题上,很多问题都会消失。

wxconfig screen shot wxconfig屏幕截图

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM