如何解决openSuSE 42.2下ct-ng build时的Error 404问题?
解决crosstool-ng构建交叉编译器时的404下载错误
你遇到的问题是典型的老版本工具链配置适配问题——你用的crosstool-ng 1.21.0-4.22中预设的Linaro工具链快照链接已经失效,导致ct-ng build在下载binutils-linaro-2.25.0-2015.01-2组件时返回404错误。下面是几个可行的解决办法:
方法1:手动下载组件到缓存目录
crosstool-ng会优先检查本地缓存是否存在需要的tarball,存在的话就会跳过远程下载步骤:
- 找到与报错中完全匹配的
binutils-linaro-2.25.0-2015.01-2格式的tarball文件(通常是.tar.xz或.tar.gz后缀),从Linaro官方归档仓库获取该文件。 - 将下载好的文件放到crosstool-ng的默认缓存目录:
~/.cache/ct-ng/1.21.0-4.22/,如果这个目录不存在,手动创建即可。 - 再次执行
ct-ng build,工具会直接使用本地缓存的文件,不再尝试远程下载。
方法2:修改配置中的失效链接
如果不想手动下载,可以直接修改crosstool-ng的配置,替换成有效的下载地址:
- 执行命令
ct-ng menuconfig进入图形配置界面。 - 导航到
Paths and misc options->Download locations,找到对应binutils-linaro的下载URL配置项。 - 将原失效的
https://cbuild.validation.linaro.org/snapshots/...地址替换为Linaro归档服务器上的有效地址。 - 保存配置后退出,重新运行
ct-ng build即可。
方法3:升级crosstool-ng到新版本
你当前使用的1.21.0版本比较老旧,这类第三方源链接失效的问题在新版本中已经被维护者修复(会定期更新下载源地址)。可以考虑:
- 从crosstool-ng官方源码编译安装最新稳定版,或者
- 查找openSUSE的第三方软件源,获取更新版本的crosstool-ng包替换当前旧版本。
注意事项
- 确保手动下载的tarball文件名和crosstool-ng配置中期望的文件名完全一致,否则工具还是会触发重新下载。
- 若修改缓存目录的文件,要保证文件权限正确,让运行
ct-ng的用户拥有读取权限。
内容的提问来源于stack exchange,提问作者Neppomuk




