开发C ++应用程序,目标服务器有不同的std lib版本,最佳实践是什么

问题描述 投票:2回答:1

问题的缩小版:问题是我正在开发C ++应用程序,使用GNU libc 2.28,GCC版本8.3的笔记本电脑(Fedora 29),我的目标服务器(RHEL 6.5)是GNU libc 2.12,GCC版本4.47。由于监管问题,服务器位于不同的网络,然后是我的开发环境,因此要在笔记本电脑和服务器之间移动文件,需要使用拇指驱动器并手动移动它们。

如果我在笔记本电脑上编译二进制文件并将其部署到服务器,我会收到与不同glibc版本相关的错误。我确信会有更多的问题,因为操作系统是如此不同,所以我只是在我的笔记本电脑上编写代码,确保它编译,然后在其中一个服务器上编译并分发。没关系。但是,其中一个问题是在编译c++11时我的笔记本电脑上有一些c++0x功能,但它在服务器上不可用,所以我必须修复服务器上的代码以确保它编译然后将其传回给我笔记本电脑,所以我可以更新源代码。这很乏味。

我想把它变成我可以在我的笔记本电脑上编译二进制文件并将二进制文件传递到服务器的点,或者,如果不这样做,只需在我的笔记本电脑上设置第二个工具链,它反映了服务器上的内容。我抓住了glibc,gcc,stdlibc ++,gcc-c ++和其他一些库的RPM文件,以匹配服务器上的内容。

更广泛的版本:使用不同的std lib版本在C ++中开发目标系统的最佳实践是什么?它只是安装目标系统的VM并在那里完成我的所有工作吗?或者我可以通过并排安装相同的库版本来使它足够接近?似乎大多数人都被认为已经知道了这些东西,我可能只是在我的知识上有一个巨大的差距,是否有任何浓缩的参考资料,如果是这样的话我可以指出?

c++ toolchain
1个回答
0
投票

根据评论中的讨论,有3个主要选项。

交叉编译;这是最难设置和容易出错的原因,这就是为什么它主要归功于嵌入式应用程序。

泊坞(容器);最简单的方法,只需创建一个与您的部署服务器匹配的容器,编译容器中的代码,然后可以将二进制文件部署到服务器。但是,Docker使用容器中的主机内核,因此可能会创建不兼容的二进制文件。

虚拟机;与Docker相比,设置的工作要多一些,但由于它拥有自己的内核,因此创建不兼容的二进制文件的可能性较小。有了vagrant,它实际上就像Docker一样容易设置,但我确实遇到了VM失败的几个地方,没有真正的错误消息;但对大多数人来说,它“只是有效”。

我最终选择了Docker,它工作正常并且很容易设置。

© www.soinside.com 2019 - 2024. All rights reserved.