重复使用 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_set
和setac_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
脚本,那么您可能拥有一个足以进行此类本地构建的本地开发环境。
通常,运行 ./configure --host=xxx
就足够了。然而,有时它是非常微妙的错误的来源 - ./configure
如果某些事情不是 100% 正确,并不总是抱怨(和失败)。
例如,我不止一次遇到过 猜测 某些功能,正如你想象的那样,有时猜测是不正确的,错误 (奇怪的行为)在很久以后才被发现。
在这种情况下,我通过查看 configure
来解决它,写下错误猜测的变量,在真实硬件上检查其正确值,将其放入 config.cache
文件并重新启动整个过程--config-cache
.
我的问题是,在真实硬件上实际生成 整个 config.cache
并将其复制到构建机器上有多安全?
显然,安装的库必须相同,但是其他可能的问题呢——例如,如果某些工具(grep、python 等)安装在其他地方怎么办?或者它完全不见了? ./configure
可以处理这个(将其无效值更新为 valid/checked 一个)吗?
目前看来config.cache
中唯一需要更新的就是ac_cv_env_host_alias_set
和setac_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
脚本,那么您可能拥有一个足以进行此类本地构建的本地开发环境。