重复使用 config.cache 进行交叉编译有多安全?

How safe is reusing config.cache for cross compilation?

通常,运行 ./configure --host=xxx 就足够了。然而,有时它是非常微妙的错误的来源 - ./configure 如果某些事情不是 100% 正确,并不总是抱怨(和失败)。

例如,我不止一次遇到过 猜测 某些功能,正如你想象的那样,有时猜测是不正确的,错误 (奇怪的行为)在很久以后才被发现。

在这种情况下,我通过查看 configure 来解决它,写下错误猜测的变量,在真实硬件上检查其正确值,将其放入 config.cache 文件并重新启动整个过程--config-cache.

我的问题是,在真实硬件上实际生成 整个 config.cache 并将其复制到构建机器上有多安全?

显然,安装的库必须相同,但是其他可能的问题呢——例如,如果某些工具(grep、python 等)安装在其他地方怎么办?或者它完全不见了? ./configure 可以处理这个(将其无效值更新为 valid/checked 一个)吗?

目前看来config.cache中唯一需要更新的就是ac_cv_env_host_alias_setsetac_cv_env_host_alias_value,然后./configure愉快地继续。

My question is, how safe is to actually produce the whole config.cache on real hardware and copy it over to the build machine?

不太安全。虽然 configure 确定和缓存的一些东西是 target-system 属性,但我希望许多东西是 build-system 属性,例如 cross-compiling 你正在使用的工具链和交叉库。您无法通过 运行ning configure 在预期的主机系统上可靠地确定此类事情。我很惊讶你在这方面的努力没有 运行 遇到比你描述的更多的麻烦。这可能是 cross-development 环境的标志,该环境是 well-built 并为其目标配置的。

Obviously, the installed libraries must be the same

这可能是您提案中最不存在的问题之一。

but what about other possible problems -- for instance what if some tool (grep, python etc) is installed on some other place? Or it is missing altogether?

是的,如果构建需要那些或类似的工具,那么这些细节就是我所说的一些 build-system 属性。

Can ./configure handle this (update its invalid value to a valid/checked one) ?

没有。 configure 依赖缓存文件的地方,重点是它不会重新检查缓存的结果。您很可能会为自己维护的项目手动设置那种东西,但这对于 third-party 代码来说不太可行,尤其是在构建多个包时。

我认为底线是 cross-compiling 具有挑战性。在可能的情况下,本机编译是首选,即使您需要在虚拟环境而不是物理环境中进行编译。如果您可以在目标环境中成功 运行 一个项目的 configure 脚本,那么您可能拥有一个足以进行此类本地构建的本地开发环境。