我正在尝试为 aarch64 (build=x86_64,host=aarch64,target=aarch64) 构建一个 gcc 交叉/本机工具链,并且在 libmpc (1.2.1 版) 上遇到困难。构建失败并出现以下错误:
../libtool --tag=CC --mode=link aarch64-linux-gnu-gcc -g -O2 -version-info 5:1:2 -L/home/chris/local/aarch64-linux-gnu/usr/lib -L/home/chris/local/aarch64-linux-gnu/usr/lib -o libmpc.la -rpath /usr/lib abs.lo acos.lo acosh.lo add.lo add_fr.lo add_si.lo add_ui.lo arg.lo asin.lo asinh.lo atan.lo atanh.lo clear.lo cmp.lo cmp_abs.lo cmp_si_si.lo conj.lo cos.lo cosh.lo div_2si.lo div_2ui.lo div.lo div_fr.lo div_ui.lo dot.lo exp.lo fma.lo fr_div.lo fr_sub.lo get_prec2.lo get_prec.lo get_version.lo get_x.lo imag.lo init2.lo init3.lo inp_str.lo log.lo log10.lo mem.lo mul_2si.lo mul_2ui.lo mul.lo mul_fr.lo mul_i.lo mul_si.lo mul_ui.lo neg.lo norm.lo out_str.lo pow.lo pow_fr.lo pow_ld.lo pow_d.lo pow_si.lo pow_ui.lo pow_z.lo proj.lo real.lo rootofunity.lo urandom.lo set.lo set_prec.lo set_str.lo set_x.lo set_x_x.lo sin.lo sin_cos.lo sinh.lo sqr.lo sqrt.lo strtoc.lo sub.lo sub_fr.lo sub_ui.lo sum.lo swap.lo tan.lo tanh.lo uceil_log2.lo ui_div.lo ui_ui_sub.lo -lmpfr -lgmp -lm
libtool: warning: library '/home/chris/local/aarch64-linux-gnu/usr/lib/libmpfr.la' was moved.
/bin/grep: /usr/lib/libgmp.la: No such file or directory
/bin/sed: can't read /usr/lib/libgmp.la: No such file or directory
libtool: error: '/usr/lib/libgmp.la' is not a valid libtool archive
这就是问题。有问题的文件 libgmp.a 现在不在“/usr/lib”中。它位于我的跨/本地链“/home/chris/local/aarch64-linux-gnu/usr/lib/”的暂存区。我使用它配置了 mpc,--with-mpfr=/home/chris/local/aarch64-linux-gnu/usr --with-gmp=/home/chris/local/aarch64-linux-gnu/usr
因此它会找到 libmpfr.la libgmp.la 的正确版本(它确实如此),但问题是 ../libtool 脚本(来自 mpc-1.2.1)运行命令
# Read the .la file
func_source "$lib"
在 libtool shell 脚本中的第 8360 行或附近。它在上面的 func_source 语句中读取的 libmpfr.la 文件正确地指出它依赖于 /usr/lib/libgmp.la (depedency_libs=' /usr/lib/libgmp.la')
,因为它属于 aarch64 系统。但它不在进行此编译的 x86_64 构建平台上。然后编译失败并出现上述 grep 错误。
我试图阅读交叉编译时可以阅读的所有资源。不幸的是,虽然交叉编译器得到了很好的解释,但如何使用外国构建平台为本地编译器进行“加拿大交叉”的信息非常有限。
谁能给我说明我应该如何解决这个问题?当 mpfr 和 gmp 库不在其正确的运行时位置并且与构建节点的体系结构不同时,我需要构建 libmpc。最终,我需要构建一个交叉/本机 gcc,但遗憾的是,如果没有 libmpc 的 aarch64 构建,我将无法尝试。
我可以简单地手动删除 mpfr.la 和 gmp.la 文件中的dependency_libs 语句,还是会在以后导致更大的问题?我是否错过了构建过程中的一个步骤,这是导致此问题的根本原因?任何帮助表示赞赏。