背景:公司C/C++源代码严格不能拷贝到客户的目标机上。
需求:项目通过一次编译出的程序要能够适配任何版本Linux发行版。
通过程序的编译运行原理可以知道有几个技术问题:
- 编译可执行程序需要依赖的本地库的版本必须低于目标机。
- 许多地方用到了C++语言11以及更高版本的新特性,所以编译器版本必须是新的。
但是一个Linux操作系统安装的默认gcc/g++依赖的是同版本的c/c++标准库。
通过寻找解决方案,目前得到有两个:
- 在低版本的Linux发行版上,安装高版本c/c++编译器。
- 在高版本的Linux发行版上编译程序,然后把程序依赖的库都安装到目标机上,让程序寻找指定的库。
第一种解决方案
优点:不需要额外安装系统库,减少安装包的大小。
缺点:编译时必须使用低版本的Linux,低版本的Linux由于缺少大量的现代化库和软件的支持导致使用环境恶劣,导致开发编译调试都非常不便。
第二种解决方案
优点:自由使用所需的Linux发行版,环境良好,开发调试都是随心所欲。
缺点:安装包会比前者多一些系统库,导致安装包较大。
通过衡量,我决定前期采用第二种方案,毕竟谁也不想在2019年还整天面对一个90年代的Linux操作系统。然后后期项目成熟以后,需要优化程序体积,才能派的上用场。
以下为第二种解决方案的要

本文介绍了如何使C/C++程序在编译一次后,能够在任何Linux发行版上运行。关键在于利用编译器参数如-Wl,--dynamic-linker, -Wl,-rpath等指定动态链接器路径和库搜索路径。文章通过一个实例展示了编译和打包过程,确保程序在目标机器上无需重新编译即可执行。"
51735506,5554115,Cocoa与Cocoa Touch:iOS与Mac OS X开发的核心框架,"['iOS开发', 'Objective-C', 'Cocoa Touch', 'Foundation框架', 'UIKit框架']
最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



