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

问题描述 投票:0回答:1

我使用wxWidgets 3.0.3在Windows上编译了MinGW64 7.2

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

然后我用CLion 2017.3创建了一个示例项目“Hello world”,并使用CMake编译。

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在那里,因为我正在试验wxGrid课程。我检查生成的.exe,它是90MB。当然我做错了。任何想法?

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

target_link_libraries(wx_widgets_hello_world ${wxWidgets_LIBRARIES})
c++ cmake wxwidgets
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.