c++ - CMAKE、SDL2 和 OPENGL : Program binary is too big

标签 c++ cmake shared-libraries static-libraries sdl-2

我使用 CMAKE 将程序链接到 SDL2、OpenGL,并将 tinyxml2 编译为共享库。生成的二进制程序为 1.4 MB,但程序中只有 1k 行代码。我怀疑某些库是静态链接的。我更喜欢将它们链接为共享库。我尝试打开和关闭调试符号:

cmake -DCMAKE_BUILD_TYPE=Debug .

和关闭:

cmake .

生成的二进制文件每个仍然是 1.4 MB,这很奇怪,因为调试应该更大。这是我的 CMakeLists.txt:

project(ProjectName)
cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "-Wall -std=c++11")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake-find-scripts")

aux_source_directory(. SRC_ROOT)
aux_source_directory(./extlib SRC_EXTLIB)
aux_source_directory(./engine SRC_ENGINE)
aux_source_directory(./utils SRC_UTILS)

include_directories(./extlib)
include_directories(./engine)
include_directories(./utils)
include_directories(${SDL2_INCLUDE_DIR})
include_directories(${OPENGL_INCLUDE_DIRS})

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
set(LONE_HEADERS ./engine/stc_config.h)
add_executable(${PROJECT_NAME} ${SRC_ROOT} ${SRC_ENGINE} ${SRC_UTILS} ${LONE_HEADERS})

find_package(SDL2 REQUIRED)
find_package(SDL2IMAGE REQUIRED)
find_package(OpenGL REQUIRED)

add_library(tinyxml2 SHARED ./extlib/tinyxml2.cpp)

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES} ${OPENGL_LIBRARIES} ${SDL2IMAGE_LIBRARIES} tinyxml2)

编辑:我已经使用 ldd 命令检查了二进制链接了哪些库文件,输出确认它们都是共享库:

    linux-vdso.so.1 (0x00007fff9dbf0000)
    libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007f3accff7000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f3accdda000)
    libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f3accb59000)
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f3acc7fb000)
    libSDL2_image-2.0.so.0 => /usr/lib/libSDL2_image-2.0.so.0 (0x00007f3acc5d5000)
    libtinyxml2.so => /home/hacow/OGLTEST/libtinyxml2.so (0x00007f3acc3bd000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3acc0ae000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007f3acbda9000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f3acbb93000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f3acb7f0000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f3acb5ec000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f3acb3e4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3acd2fa000)
    libnvidia-tls.so.349.16 => /usr/lib/libnvidia-tls.so.349.16 (0x00007f3acb1e1000)
    libnvidia-glcore.so.349.16 => /usr/lib/libnvidia-glcore.so.349.16 (0x00007f3ac8472000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f3ac8130000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f3ac7f1e000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f3ac7cfc000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f3ac7af8000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f3ac78f2000)

最佳答案

使用 cmake 构建。 使用与该目录中最新构建相同的 CMAKE_BUILD_TYPE。使用 cmake -DCMAKE_BUILD_TYPE=Release . 在 Release模式下构建。如果您先构建调试然后发布,使用您描述的过程,它只会重建您的调试二进制文件。

关于c++ - CMAKE、SDL2 和 OPENGL : Program binary is too big,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447910/

相关文章:

c++ - CMake 和 Make 需要运行两次才能成功构建代码

c++ - Cmake 添加新项目到解决方案

c++ - 在 CMAKE 中正确设置 Visual Studio 链接器标志/SUBSYSTEM

Linux 等效于 Windows DLL 转发器或 MacOS reexport_library

在我的 malloc 共享库中找不到我的段错误

C 共享库 : static variable initialization + global variable visibility among processes

c++ - 分割 std::vector of 2D points

c++ - 人脸识别的opencv代码在visual c++中预测不正确

c++ - 堆排序,除了前两个值之外的所有值都被排序

c++ - Qt电话总是拨同一个号码