当前位置: 首页 > 面试题库 >

是否可以编译无需重新编译即可在所有Linux发行版中执行的C / C ++源代码?

彭梓
2023-03-14
问题内容

是否可以编译无需重新编译即可在所有Linux发行版中执行的C / C ++源代码?

如果答案是肯定的,我可以使用任何外部(非标准C / C ++)库吗?

我要分发我的二进制应用程序,而不是分发源代码。


问题答案:

不,您不能编译在所有Linux发行版中执行的可执行文件。但是,您可以编译可在人们倾向于关注的大多数发行版上运行的可执行文件。

  1. 编译32位。为您愿意支持的最低CPU级别进行编译。

  2. 构建自己的glibc版本。使用该--enable-kernel选项设置您愿意支持的最低内核版本。

  3. 编译您打算使用的所有其他库。使用glibc构建中的标头和所选的CPU /编译器标志。

  4. 静态链接。

  5. 对于您无法静态链接的任何内容(例如,如果您需要访问系统的默认名称解析或需要PAM),则必须设计自己的帮助程序和API。将源发布给帮助程序进程,然后让他们(或您的安装程序)对其进行编译。

  6. 在您需要支持的所有平台上进行全面测试

如果某些库调用的函数无法使用此机制,则可能需要对其进行调整。这包括dlopengethostbynameiconv_open,等等。(这些功能从根本上依赖于动态链接。请参见上面的第5步。在链接这些功能时,您会得到警告。)

另外,如果您不小心,时区可能会中断,因为您的代码可能无法理解系统的区域格式或区域文件位置。(您将不会收到任何警告。它将无法正常工作。)

大多数执行此操作的人使用的最低支持的CPU是Pentium 4,最低支持的内核版本是2.6.0。



 类似资料:
  • 我的构建服务器安装了Open JDK 8,我的正式服安装了oracle JRE 8。是否有可能在开放的JDK中编译代码并在Oracle JRE 8中部署工件?

  • 问题内容: 例如,我可以同时在Ubuntu 14.04上安装Atlas,OpenBlas,MKL并在它们之间切换而无需重新编译Caffe吗? 问题答案: 当然,您必须安装它们,并在Ubuntu / Debian上发出命令 您将获得编号列表的替代品,并可以在它们之间轻松切换 链接:https://wiki.debian.org/DebianScience/LinearAlgebraLibraries

  • 问题内容: 现在我有了一些C源代码,我想在我的Java应用程序中使用它。我需要执行C源代码,并将结果返回到我的Java应用程序。与其将所有C源代码重写为Java,我如何在Java应用程序中重用C源代码? 问题答案: 看一下Java Native Interface 。 Java本机接口(JNI)是一种编程框架,它使Java虚拟机(JVM)中运行的Java代码能够被本机应用程序(特定于硬件和操作系统

  • 当我使用带VS2015的英特尔C编译器编译发行版时,它将失败。但是当我编译调试版本时,它就工作了。我不明白发生了什么。配置是否有一些错误?错误列表如下所示。我该怎么做? --编辑-- 今天,我比较了每个选项的调试版本和发布版本之间的配置,我最终发现如果我将过程间优化设置为no或单文件(/Qip),它是有效的。但是如果我把过程间优化设置为多文件(/Qipo),就不行了。另外,我在intel C编译器

  • 问题内容: 这是我想做的: 运行程序并初始化一些数据结构。 然后,编译可以访问/修改现有数据结构的其他代码。 根据需要重复步骤2。 我希望能够既要做到这一点,并使用(并最终于)类Unix系统(特别是Linux和Mac OS X)。这个想法基本上是为这些语言实现read-eval- print循环,该循环会在输入表达式和语句时对其进行编译,并使用它们来修改现有的数据结构(该操作始终以脚本语言完成)。

  • 当我尝试使用Microsoft的Visual C#编译器(v4.8.4084.0)从命令行编译源代码时,我得到以下错误和/或警告: