- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
是否可以编译在所有 Linux 发行版中执行而无需重新编译的 C/C++ 源代码?
如果答案是肯定的,我可以使用任何外部(非标准 C/C++)库吗?
我想分发我的二进制应用程序而不是分发源代码。
最佳答案
不,您不能编译在所有 Linux 发行版中执行的可执行文件。但是,您可以编译一个适用于人们倾向于关心的大多数发行版的可执行文件。
编译 32 位。编译为您愿意支持的最低 CPU 级别。
构建您自己的 glibc 版本。使用 --enable-kernel
选项设置您愿意支持的最低内核版本。
编译您计划自己使用的所有其他库。使用 glibc 构建中的 header 和您选择的 CPU/编译器标志。
静态链接。
对于您无法静态链接的任何内容(例如,如果您需要访问系统的默认名称解析或需要 PAM),您必须设计自己的帮助进程和 API。将源代码发布到帮助程序进程并让他们(或您的安装程序)编译它。
在您需要支持的所有平台上进行彻底测试。
如果某些库调用了无法使用此机制的函数,您可能需要调整它们。这包括 dlopen
、gethostbyname
、iconv_open
等。 (这些类型的函数基本上依赖于动态链接。参见上面的第 5 步。链接这些函数时会收到警告。)
此外,如果您不小心,时区往往会中断,因为您的代码可能无法理解系统的区域格式或区域文件位置。 (您不会收到这些警告。它只是行不通。)
大多数这样做的人都在构建时使用最低支持的 CPU 是 Pentium 4,最低支持的内核版本是 2.6.0。
关于c++ - 是否可以编译在所有 Linux 发行版中执行的 C/C++ 源代码而无需重新编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461152/
我是一名优秀的程序员,十分优秀!