【发布时间】:2012-09-29 14:51:06
【问题描述】:
代码是c/c++编写的,可能依赖于编译主机中的一些库; 它应该在另一个没有库的主机上运行,具体取决于问题。两台主机都是linux,可能有不同的版本。 你有好的策略吗?
【问题讨论】:
-
也许很容易安装需要的动态库
标签: linux cross-compiling abi
代码是c/c++编写的,可能依赖于编译主机中的一些库; 它应该在另一个没有库的主机上运行,具体取决于问题。两台主机都是linux,可能有不同的版本。 你有好的策略吗?
【问题讨论】:
标签: linux cross-compiling abi
考虑此问题的所有答案(静态链接、在最旧的 Linux 上编译等),然后通过 Linux App Checker 检查您的最终二进制文件,以显示与其他 Linux 发行版的兼容性问题。
【讨论】:
Linux 上的纯静态链接是 discouraged,只有当您使用 C++ 无法选择的替代 libc(例如 Dietlibc)时才有可能,我的 favoured 方法是在最旧的版本上构建应用程序您必须支持的 Linux 版本,因为较新的 libc 版本将具有向后兼容性。
这将仅涵盖 libc,其他要求,例如 gtk、pangom 等必须直接编译到您的二进制文件中。
【讨论】:
大多数平台都有定义明确的 ABI,涵盖 C 代码,但涵盖 C++ 功能的 ABI 还不常见。
仅使用 libc 以 c++ 编写的程序可能无法在其他平台上运行。 如果二进制兼容性是一个重要问题,请考虑使用 c。
【讨论】:
静态链接应用程序,使其依赖尽可能少的动态加载库。这是这个问题的一般解决方案。
其他解决方案包括:
LD_LIBRARY_PATH 变量以使包含的版本成为首选版本。dlopen() 和朋友动态加载库,并手动处理库版本的差异。【讨论】: