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