cmake linux 静态编译,CMake纯静态编译

为什么要静态编译

部署程序的时候经常需要编译成纯静态的二进制文件。

相比动态链接,好处是很明显的:无需依赖,在linux平台上畅通无阻,无需在环境中部署所需的动态库

执行速度更快?

但也有一些坏处:内存占用较大

文件体积较大

可维护性较差,当库的版本更新后,需要重新编译发布,而不是像动态链接一样直接替换动态库文件

是否需要静态编译就看自己的取舍吧~

如何静态编译cmake_minimum_required(VERSION 2.8)

project(static_linking_test)

# 静态链接

set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc")

# 搜索当前文件夹下所有的cpp文件

file(GLOB SRC *.cpp)

# 以boost为例,设置使用boost的静态库

set(Boost_USE_STATIC_LIBS ON)

find_package(Boost REQUIRED system thread filesystem timer chrono

program_options)

include_directories(${Boost_INCLUDE_DIRS})

add_executable(static_linking_test ${SRC})

set_target_properties(static_linking_test PROPERTIES LINK_SEARCH_START_STATIC 1)

set_target_properties(static_linking_test PROPERTIES LINK_SEARCH_END_STATIC 1)

# 链接所需要的静态库

target_link_libraries(static_linking_test -static

${Boost_LIBRARIES}

zlib

pthread

rt

)

通常需要安装开发环境的各个静态库,第三方库就需要自己编译或是使用别人编译好的。libc库就需要自己安装了。

如:# centos

sudo yum install glibc-static

# ubuntu

sudo apt-get install libc6-dev

测试静态链接

编译:cmake .

make

测试:ldd static_linking_test

# 输出not a dynamic executable即为成功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值