开发C++;应用程序,目标服务器有不同的std库版本,最佳实践是什么 窄版本的问题:< /强>问题是我正在开发C++应用程序,在GNU LIBC 2.28、GCC版本8.3和我的目标服务器(RHEL 6.5)上使用笔记本电脑(FEDORA 29),GNU LIBC 2.12,GCC版本4.47。由于管理问题,服务器与我的开发环境位于不同的网络上,因此在笔记本电脑和服务器之间移动文件需要使用拇指驱动器并手动移动它们

开发C++;应用程序,目标服务器有不同的std库版本,最佳实践是什么 窄版本的问题:< /强>问题是我正在开发C++应用程序,在GNU LIBC 2.28、GCC版本8.3和我的目标服务器(RHEL 6.5)上使用笔记本电脑(FEDORA 29),GNU LIBC 2.12,GCC版本4.47。由于管理问题,服务器与我的开发环境位于不同的网络上,因此在笔记本电脑和服务器之间移动文件需要使用拇指驱动器并手动移动它们,c++,toolchain,C++,Toolchain,如果我在笔记本电脑上编译一个二进制文件并将其部署到服务器上,就会出现与不同glibc版本相关的错误。我确信由于操作系统如此不同,将会有更多的问题,所以我只需在笔记本电脑上编写代码,确保它可以编译,然后在其中一台服务器上编译并分发。那很好。但是,其中一个问题是,在编译c++0x时,我的笔记本电脑上有一些c++11功能可用,但在服务器上不可用,因此我必须修复服务器上的代码,以确保它能编译,然后将其传递回笔记本电脑,以便更新源代码。这很乏味 我希望我可以在笔记本电脑上编译二进制文件并将二进制文件传递给

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

我希望我可以在笔记本电脑上编译二进制文件并将二进制文件传递给服务器,否则,在笔记本电脑上设置第二个工具链,以镜像服务器上的内容。我抓取了glibc、gcc、stdlibc++、gcc-c++和其他一些库的RPM文件,以匹配服务器上的内容


<>强>宽版本:在不同的STD LIB版本中,C++开发目标系统的最佳实践是什么?是否只是安装目标系统的VM并在那里完成我的所有工作?或者我可以通过并排安装相同的库版本来接近它吗?似乎大多数人都已经知道这方面的知识了,我的知识可能有很大的差距,如果是这样的话,有没有浓缩的参考资料可以供我参考?

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

交叉编译;这是最难设置和最容易出错的,这就是为什么它在很大程度上被降级为嵌入式应用程序

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

虚拟机;与Docker相比,要设置的工作要多一点,但因为它有自己的内核,所以创建不兼容二进制文件的机会就少了。使用vagrant,它实际上和Docker一样容易设置,但我确实遇到了一些VM出现故障的地方,没有真正的错误消息;但对大多数人来说,它“只是起作用”


我最后和Docker一起去了,它工作得很好,而且很容易安装

也许是Docker?顺便说一句,狭义的版本已经相当广泛了;)必须有一个VM/本地测试系统Id。当然,您可以在本地开发一些东西,但最终直接从本地桌面部署到安全的生产系统可能不是最好的主意,迟早会有一些东西不起作用,然后你似乎没有简单的调试方法?根据目标系统的性质,交叉编译也可能是一个可行的解决方案。Docker似乎是这里的最佳选择-澄清一下,在你的笔记本电脑上,而不是在目标服务器上。在只在glibc和编译器版本中不同的Linux平台之间进行交叉编译可能会很痛苦,因为很少有人会这样做。