zoukankan      html  css  js  c++  java
  • Eclipse CDT中运行wxWidgets实战

    搞java的对cpp不熟,折腾了好久终于跑起来了。。

    首先去下载mingw-get-inst-20120426.exe,并安装到C:\MinGW

    下载地址为:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

    (安装时勾选c++和mysys即可)


    新建环境变更MINGW_HOME值为C:\MinGW

    配置环境变量
    变量名                                变量值
    PATH                                  %MINGW_HOME%\bin;
    LIBRARY_PATH                     %MINGW_HOME%\lib
    C_INCLUDEDE_PATH              %MINGW_HOME%\include
    CPLUS_INCLUDE_PATH           %MINGW_HOME%\lib\gcc\mingw32\4.6.2\include\c++;%MINGW_HOME%\lib\gcc\mingw32\4.6.2\include\c++\backward;%MINGW_HOME%\lib\gcc\mingw32\4.6.2\include

    接下来


    一路点下一步至完成。

    新建一个source folder名为src,新建一个hello.cpp文件

    得益于eclipse,你只需要输入
    #in
    ios
    using
    main
    cout
    自动补全,就会生成如下代码(我试了下强大的vs2008,怎么没有这些快捷键?)
    #include <iostream>
    using namespace std;
    int main(int argc, char **argv) {
        cout << "Hello";
        return 0;
    }

    接下来编译,控制台打出的命令如下
    **** Internal Builder is used for build               ****
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src\hello.o ..\src\hello.cpp
    g++ -o test.exe src\hello.o
    Build complete for project test
    Time consumed: 1875  ms. 

    运行,控制台打出的命令如下
    Hello

    清除,控制台打出的命令如下
    **** Clean-only build of configuration Debug for project test ****
    rm -rf test.exe src/hello.o src/hello.d
    Build complete for project test

    接下来就是跑该死的wx了。

    首先下载wxMSW-2.8.12-Setup.exe,安装在C:\wxWidgets-2.8.12目录下

    http://www.wxwidgets.org/downloads/

    装好后多出如下菜单

    在mingw shell中进入到安装目录,。参考其它博文编译。。。
    (
    参考:http://lvstone.blog.163.com/blog/static/17736015120112114511127/
    参考:http://max.berger.name/howto/wxWidgets/wxWidgets_MinGW.jsp
    参考:http://max.berger.name/howto/wxWidgets/wxWidgets_Eclipse.jsp
    参考:http://www.cnblogs.com/waynecheng/archive/2012/04/18/2455765.html
    应该只需要从mingw shell中进入C:\wxWidgets-2.8.12然后依次执行如下命令就行了
    ./configure
    make

     或者
    进入C:\wxWidgets-2.8.12\build\msw,执行
    make -f makefile.gcc BUILD=debug UNICODE=1

    (不知道以上两种方式有无区别)

    完事后会生成
    C:\wxWidgets-2.8.12\lib\gcc_lib
    C:\wxWidgets-2.8.12\build\msw\gcc_mswud

    这样的目录。。如果是用vc2008编译,则生成的文件就不在gcc*下面,而是vc**啥的,

    装好后,设置环境变量WX值为C:\wxWidgets-2.8.12

    在mingw shell(注意不是ms dos)下

    这两个命令的返回值一会在CDT中编译cpp时会用到。。

    (在ubuntu下也会用到这两个值,不过是这样用的

    g++ -o simple simple.cpp \
     `wx-config --cxxflags --libs`

    以上的命令有点看不懂,查了一下shell会先执行`倒引号中的命令。。

    注意需要将mingw shell中的路径稍做整理,变成正常的windows下的路径,如下:
    $ .\wx-config --cxxflags
    -Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -D__WXMSW__


    $ .\wx-config --libs
    -Lc:\wxWidgets-2.8.12\lib   -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32

    接下来,把刚才的hello.cpp干掉,新建一个Simple.cpp,代码如下:

    01 #include <wx/wx.h>
    02  
    03 class Simple: public wxFrame {
    04 public:
    05     Simple(const wxString& title);
    06 };
    07  
    08 class MyApp: public wxApp {
    09 public:
    10     virtual bool OnInit();
    11 };
    12  
    13 Simple::Simple(const wxString& title) :
    14         wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) {
    15     Centre();
    16 }
    17  
    18 IMPLEMENT_APP (MyApp)
    19  
    20 bool MyApp::OnInit() {
    21     Simple *simple = new Simple(wxT("Simple"));
    22     simple->Show(true);
    23     return true;
    24 }

    如下:

    可以看到有一堆错误,首先解决include wx/wx.h不识别的问题。

    工程名上右键属性,找到如下内容,并将wx-config --cxxflags返回值中的-I部分加进去

    保存后,错误没了,而且可以通过ctrl+鼠标左键,点开wx/wx.h

    接下来,编译,,那是一堆错误:
    **** Internal Builder is used for build               ****
    g++ -Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -O0 -g3 -Wall -c -fmessage-length=0 -o src\Simple.o ..\src\Simple.cpp
    g++ -o test.exe src\Simple.o
    src\Simple.o: In function `Simple':
    D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxFrameNameStr'
    D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxDefaultPosition'

    接下来把wx-config --libs的返回值加入到下图中的位置。。

    保存,还是上面的错误:
    **** Internal Builder is used for build               ****
    g++ -Ic:\wxWidgets-2.8.12\lib\wx\include\msw-unicode-release-static-2.8 -Ic:\wxWidgets-2.8.12\include -Ic:\wxWidgets-2.8.12\contrib\include -O0 -g3 -Wall -c -fmessage-length=0 -o src\Simple.o ..\src\Simple.cpp
    g++ -Lc:\wxWidgets-2.8.12\lib -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32 -o test.exe src\Simple.o
    src\Simple.o: In function `Simple':
    D:\workspaces\cpp\test\Debug/../src/Simple.cpp:14: undefined reference to `wxFrameNameStr'


    接下来找到如下部分

    将${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
    改成
    ${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}

    再次编译
    **** Internal Builder is used for build               ****
    g++ -o test.exe src\Simple.o -Lc:\wxWidgets-2.8.12\lib -Wl,--subsystem,windows -mwindows c:\wxWidgets-2.8.12\lib\libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
    Build complete for project test
    Time consumed: 2203  ms. 

    运行,终于,传说中的窗口出现了。。

  • 相关阅读:
    Nginx性能测试
    Centos 7.0设置/etc/rc.local无效问题解决
    Centos 7.0系统服务管理
    Centos 7.0设置静态IP
    importError:cannot import name imsave/imread等模块
    一位父亲写给儿子的信:今天你努力一点,比将来低头求人强100倍
    清华大学计算机学科推荐学术会议和期刊列表---人工智能与模式识别
    在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’
    论文阅读笔记---HetConv
    typeerror: __init__() missing 2 required positional arguments: 'inputs' and 'outputs'
  • 原文地址:https://www.cnblogs.com/shihao/p/2914253.html
Copyright © 2011-2022 走看看