wxWidgets示例项目产生巨大的可执行文件(90MB)

时间:2017-12-24 19:56:33

标签: c++ cmake wxwidgets

我使用setAdapter

在Windows上编译了wxWidgets 3.0.3
MinGW64 7.2

然后我用mingw32-make -j4 -f makefile.gcc BUILD=debug SHARED=0 UNICODE=1 创建了一个示例项目“Hello world”,并使用CMake编译。

CLion 2017.3

包含的标题是

cmake_minimum_required(VERSION 3.9)
project(wx_widgets_hello_world)

set(CMAKE_CXX_STANDARD 11)

set(wxWidgets_ROOT_DIR "C:/wx_widgets_3_0_3")
set(wxWidgets_CONFIGURATION mswud)
find_package(wxWidgets COMPONENTS adv core base REQUIRED)
include(${wxWidgets_USE_FILE})

add_executable(wx_widgets_hello_world main.cpp)
target_link_libraries(wx_widgets_hello_world ${wxWidgets_LIBRARIES})

#include <wx/wx.h> #include <wx/grid.h> 因为我正在试验adv课程。 我检查生成的.exe,它是90MB。当然我做错了。有什么想法吗?

我不是CMake的专家(从未使用过),但也许是因为我将所有库(wxGrid)与

链接起来
adv base core

1 个答案:

答案 0 :(得分:0)

首先,Debug版本总是大于Release版本,因为它们包含大量用于调试的信息。因此,检查Release构建大小会为您提供更多有用的信息。

其次,我假设SHARED=0表示wxWidgets是作为静态库构建的,并且是静态链接的。这意味着整个库被合并到您的可执行文件中。对variety of reasons实际使用库的共享版本通常更好。特别是,这将大大减少可执行文件的大小。请注意,用户无论如何都需要wxWidgets共享库来运行您的可执行文件,但它可能已经安装在他的系统上。

最后,看看object stripping。这是一个从可执行文件中删除未使用的符号(函数,全局变量等)的过程。我不知道CMake是否默认执行此操作。 GCC编译器选项&#34; -Os&#34; (针对大小进行优化)对于发布版本来说也是一件好事。