2

代码是c/c++编写的,可能依赖于编译主机中的一些库;它应该在另一个没有库的主机上运行,​​具体取决于问题。两台主机都是linux,可能有不同的版本。你有好的策略吗?

4

4 回答 4

3

不鼓励在 Linux 上进行纯静态链接,只有在使用 C++ 无法选择的替代 libc(例如dietlibc)时才有可能,我最喜欢的方法是在您必须支持的最旧版本的 Linux 上构建应用程序因为较新的 libc 版本将具有向后兼容性。

这将仅涵盖 libc,其他要求,例如 gtk、pangom 等必须直接编译到您的二进制文件中。

于 2012-10-09T12:13:04.723 回答
2

静态链接应用程序,使其依赖尽可能少的动态加载库。这是这个问题的一般解决方案。

其他解决方案包括:

  • 随应用程序提供所需的库,并覆盖系统LD_LIBRARY_PATH变量以使包含的版本成为首选版本。
  • 编写代码以动态加载使用dlopen()和朋友的库,并手动处理库版本的差异。
于 2012-10-09T09:50:33.577 回答
0

大多数平台都有定义明确的 ABI,涵盖 C 代码,但涵盖 C++ 功能的 ABI 还不常见。

仅使用 libc 用 c++ 编写的程序可能无法在其他平台上运行。如果二进制兼容性是一个重要问题,请考虑使用 c。

于 2012-10-09T11:13:59.433 回答
0

考虑这个问题的所有答案(静态链接、在最旧的 Linux 上编译等),然后通过Linux App Checker检查您的最终二进制文件,以显示与其他 Linux 发行版的兼容性问题。

在此处输入图像描述

于 2012-10-10T07:06:57.070 回答