【发布时间】:2019-09-03 10:18:33
【问题描述】:
问题的狭义版本:问题是我正在开发 C++ 应用程序,使用 GNU libc 2.28、GCC 版本 8.3 和我的目标服务器 (RHEL 6.5) 的笔记本电脑 (Fedora 29) ) 是 GNU libc 2.12,GCC 版本 4.47。由于监管问题,服务器与我的开发环境位于不同的网络上,因此在笔记本电脑和服务器之间移动文件需要使用拇指驱动器并手动移动它们。
如果我在笔记本电脑上编译二进制文件并将其部署到服务器,我会收到与不同 glibc 版本相关的错误。我敢肯定会有更多的问题,因为操作系统是如此不同,所以我只是在我的笔记本电脑上编写代码,确保它可以编译,然后在其中一台服务器上编译并分发。没关系。但是,问题之一是在我的笔记本电脑上编译c++0x 时可以使用一些c++11 功能,但它在服务器上不可用,所以我必须修复服务器上的代码以确保它编译然后通过它回到我的笔记本电脑,所以我可以更新源代码。这很乏味。
我想让它达到这样的程度服务器。我抓取了 glibc、gcc、stdlibc++、gcc-c++ 和其他一些库的 RPM 文件以匹配服务器上的内容。
更广泛的版本: 使用不同标准库版本的 C++ 目标系统开发的最佳实践是什么?它只是安装目标系统的虚拟机并在那里完成我所有的工作吗?或者我可以通过并排安装相同的库版本来让它足够接近吗?似乎大多数人都已经知道这些东西,而我的知识可能存在巨大差距,如果是这样的话,是否有任何浓缩的参考资料可以指出?
【问题讨论】:
-
Docker,也许?
-
顺便说一句,窄版已经相当宽泛了;)
-
拥有一个虚拟机/本地测试系统 ID 说是必须的。虽然您当然可以在本地开发一些东西,但最终直接从本地桌面部署到安全的生产系统可能不是最好的主意,迟早有些东西不会工作,然后您似乎没有简单的调试方法?跨度>
-
根据目标系统的性质,交叉编译也是一种可行的解决方案。
-
Docker 似乎是这里的最佳选择——澄清一下,在您的笔记本电脑上,而不是在目标服务器上。仅在 glibc 和编译器版本不同的 Linux 平台之间进行交叉编译可能会很痛苦,因为很少有人会这样做。