代码之家  ›  专栏  ›  技术社区  ›  andrew

在CLion(windows)上构建wxWidgets 3.0.3程序

  •  1
  • andrew  · 技术社区  · 7 年前

    Building wxWidgets 3.1.0 on CLion (Ubuntu)

    Getting started with wxWidgets and CLion?

    为了了解这些问题,我可以在clion中运行Wxwidgets GUI“hello world”程序来使用Wxwidgets 3.0.3。

    My screenshot

    但我不能以同样的方式运行其他wxwidgets示例,如网格aui ribbon advance GUI。这些GUI示例可以在我的代码::块上运行。

    操作系统:Server 2016

    clion:2017.2.3

    wxwidgets:3.0.3

    MingW:x86\u 64-4.9.3-win32-seh-rt\u v4-rev1

    我的简历。txt如下所示(wxconfig.exe已复制到cmake bin字典):
    修改cmakelist,

     cmake_minimum_required(VERSION 3.9)
    project(HelloTest)
    
    #set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
    
    find_package(wxWidgets REQUIRED
            core base aui html jpeg tiff png gif zlib
    #        adv dbgrid expat html jpeg ribbon
    #        media mono net png propgrid qa
    #        regex ribbon  richtext scintilla
    #        stc tiff webview  xml xrc zlib
            )
    
    include(${wxWidgets_USE_FILE})
    
    include_directories(D:/IDE/wxWidgets-3.0.3/samples)
    set(SOURCE_FILES auidemo.cpp)
    add_executable(HelloTest ${SOURCE_FILES})
    target_link_libraries(HelloTest ${wxWidgets_LIBRARIES})
    

    但我得到如下错误

    CMakeFiles\HelloTest.dir/objects.a(auidemo.cpp.obj): In function `MyFrame::CreateGrid()':
    D:/IdeaProjects/HelloTest/auidemo.cpp:1568: undefined reference to `wxGrid::CreateGrid(int, int, wxGrid::wxGridSelectionModes)'
    CMakeFiles\HelloTest.dir/objects.a(auidemo.cpp.obj): In function `wxGrid::wxGrid(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&)':
    D:/IDE/wxWidgets-3.0.2/include/wx/generic/grid.h:944: undefined reference to `wxGrid::Init()'
    D:/IDE/wxWidgets-3.0.2/include/wx/generic/grid.h:946: undefined reference to `wxGrid::Create(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&)'
    CMakeFiles\HelloTest.dir/objects.a(auidemo.cpp.obj):auidemo.cpp:(.rdata$.refptr.wxGridNameStr[.refptr.wxGridNameStr]+0x0): undefined reference to `wxGridNameStr'
    CMakeFiles\HelloTest.dir/objects.a(auidemo.cpp.obj):auidemo.cpp:(.rdata$.refptr._ZTV6wxGrid[.refptr._ZTV6wxGrid]+0x0): undefined reference to `vtable for wxGrid'
    D:/IDE/wxWidgets-3.0.2/lib/gcc_lib/libwxmsw30ud_aui.a(auilib_floatpane.o):floatpane.cpp:(.rdata$.refptr._ZN11wxMiniFrame12ms_classInfoE[.refptr._ZN11wxMiniFrame12ms_classInfoE]+0x0): undefined reference to `wxMiniFrame::ms_classInfo'
    D:/IDE/wxWidgets-3.0.2/lib/gcc_lib/libwxmsw30ud_aui.a(auilib_floatpane.o):floatpane.cpp:(.rdata$.refptr._ZTV11wxMiniFrame[.refptr._ZTV11wxMiniFrame]+0x0): undefined reference to `vtable for wxMiniFrame'
    D:/IDE/wxWidgets-3.0.2/lib/gcc_lib/libwxmsw30ud_html.a(htmllib_m_image.o): In function `wxHtmlImageCell::wxHtmlImageCell(wxHtmlWindowInterface*, wxFSFile*, int, bool, int, bool, double, int, wxString const&)':
    C:\wxWidgets-3.0.2\build\msw/../../src/html/m_image.cpp:393: undefined reference to `wxGIFDecoder::wxGIFDecoder()'
    C:\wxWidgets-3.0.2\build\msw/../../src/html/m_image.cpp:394: undefined reference to `wxGIFDecoder::LoadGIF(wxInputStream&)'
    D:/IDE/wxWidgets-3.0.2/lib/gcc_lib/libwxmsw30ud_html.a(htmllib_htmlfilt.o):htmlfilt.cpp:(.rdata$.refptr._ZTV20wxStringOutputStream[.refptr._ZTV20wxStringOutputStream]+0x0): undefined reference to `vtable for wxStringOutputStream'
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   andrew    7 年前
        1.I use "mingw32-make -j 8 -f makefile.gcc BUILD=debug MONOLITHIC=0 SHARED=0 UNICODE=1 USE_GUI=1 USE_OPENGL=1 USE_ODBC=1 RUNTIME_LIBS=static MSLU=1 VENDOR=..  CXXFLAGS=-std=gnu++11 -Wall",The Clion can't compile the sample code.
    
        2.when I use "mingw32-make -j 8 -f makefile.gcc BUILD=debug ***MONOLITHIC=1*** SHARED=0 UNICODE=1 USE_GUI=1 USE_OPENGL=1 USE_ODBC=1 RUNTIME_LIBS=static MSLU=1 VENDOR=..  CXXFLAGS=-std=gnu++11 -Wall"",all the andvance GUI sample code can be compile and run.
    
        3.Follow the offical doc,The vision of MingW “x86_64-4.9.3-win32-seh-rt_v4-rev1” be used .it's working well.
    
        4.I have try the other vison MingW ,it's not working.
    

    screen shot

    另一种方法是,如果我们编译Wxwidgets时使用“单片=0”,那么我们必须链接libxxx。a按顺序。并添加“-lcomctl32”选项,即我的新cmakelist。txt如下。它工作得很好;

        cmake_minimum_required(VERSION 3.8)
    project(NewTestWxAdv)
    
    set(CMAKE_CXX_STANDARD 11)
    include_directories(
            includes
            D:/IDE/wxWidgets-3.0.3/include
    #        D:/IDE/wxWidgets-3.0.3/lib/gcc_lib/mswud
            D:/IDE/wxWidgets-3.0.3/lib/gcc_lib/mswu
    )
    link_directories(
            D:/IDE/wxWidgets-3.0.3/lib/gcc_lib
    )
    
    set(
            WX_LIBS
    #        libwxmsw30ud_propgrid.a
    #        libwxmsw30ud_ribbon.a
    #        libwxmsw30ud_stc.a
    #        libwxmsw30ud_webview.a
    #        libwxmsw30ud_gl.a
    #        libwxmsw30ud_richtext.a
    #        libwxmsw30ud_xrc.a
    #        libwxmsw30ud_aui.a
    #        libwxmsw30ud_html.a
    #        libwxmsw30ud_adv.a
    #        libwxmsw30ud_core.a
    #        libwxbase30ud_xml.a
    #        libwxbase30ud_net.a
    #        libwxbase30ud.a
    #        libwxscintillad.a
    #        libwxtiffd.a
    #        libwxjpegd.a
    #        libwxpngd.a
    #        libwxzlibd.a
    #        libwxregexud.a
    #        libwxexpatd.a
    #        libwxmsw30ud_media.a
    
            libwxmsw30u_propgrid.a
            libwxmsw30u_ribbon.a
            libwxmsw30u_stc.a
            libwxmsw30u_webview.a
            libwxmsw30u_gl.a
            libwxmsw30u_richtext.a
            libwxmsw30u_xrc.a
            libwxmsw30u_aui.a
            libwxmsw30u_html.a
            libwxmsw30u_adv.a
            libwxmsw30u_core.a
            libwxbase30u_xml.a
            libwxbase30u_net.a
            libwxbase30u.a
            libwxscintilla.a
            libwxtiff.a
            libwxjpeg.a
            libwxpng.a
            libwxzlib.a
            libwxregexu.a
            libwxexpat.a
            libwxmsw30u_media.a
    )
    
    set(SOURCE_FILES aui.cpp)
    add_executable(NewTestWxAdv ${SOURCE_FILES})
    target_link_libraries(
            NewTestWxAdv
            ${WX_LIBS}
            -lcomctl32
    )