c++ - 通过 CMake 2.8 静态链接 Linux C++ 应用程序

标签 c++ linux cmake

我在 Ubuntu 14.04/GCC 4.8/CMake 2.8 中使用 -static-libgcc 和 -static-libstdc++ 构建了应用程序。 ldd命令显示:

linux-vdso.so.1 =>  (0x00007ffc16195000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcb18256000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcb17f50000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb17b8a000)
/lib64/ld-linux-x86-64.so.2 (0x000055fc367e1000)

当我将 -static 添加到 CMAKE_EXE_LINKER_FLAGS - 我从 ldd 得到了不同的输出:

linux-vdso.so.1 =>  (0x00007ffd48349000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe8d0335000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe8d0031000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe8cfd2a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe8cf965000)
/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x000055d61ec7d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe8cf74f000)

我认为 -static 标志将导致静态链接应用程序。它没有发生。 谁能解释一下为什么?

我有 Qt Creator 生成的 makefile - 使用 -static 开关生成完全静态的应用程序。

最佳答案

-static-static-libgcc-static-libstdc++ 的不同之处在于-static不假定标准库的静态链接。这两个标志控制此行为。

要与标准库静态链接,请将这两个标志添加到 CMake CMAKE_EXE_LINKER_FLAGS 变量。

关于c++ - 通过 CMake 2.8 静态链接 Linux C++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35994339/

相关文章:

c++ - XShmPutImage 事件通知挂起

c++ - 在 Xcode 中新建一个 "Shell Tool"目标,用于 Google Test

linux - 在外部硬盘驱动器或另一个集群上备份整个 Linux 服务器

python - cmake osx部署目标是 '10.11'但CMAKE_OSX_SYSROOT错误

c++ - 如何使用 include-what-you-use 工具与 CMake 一起检测未使用的 header ?

c++ - 打印自定义字符串数据时出现奇怪的输出(c++ 新手)

c++ - 无法在 C++ 中创建包含日期和时间的文件名

linux - maven调用在哪里?

python-3.x - 在 debian 11 Bullseye 上使用 Ansible 安装损坏的软件包

c++ - CMake 无法在新版本中识别 C++ 编译器版本