问题描述
我一直在尝试构建一个针对我的主机的 GNU 工具链(您可以将其称为交叉编译器或带有前缀的编译器)。我一直在关注 these instructions,但在我的一些配置选项和我的代码版本中与他们不同。我顺利完成了第 6 步,在这里我需要完整地构建 glibc。到达那里后,我收到以下编译错误:
In file included from /usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/immintrin.h:55,from /usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/x86intrin.h:32,from ../sysdeps/unix/sysv/linux/x86/hle.h:5,from ../sysdeps/unix/sysv/linux/x86/elision-lock.c:22:
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h: In function '_mm_roundscale_round_ss':
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h:9147:10: error: cannot convert a value of type 'int' to vector type '__vector(4) float' which has different size
9147 | (__v4sf) __B,__imm,__R);
| ^
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h: In function '_mm_roundscale_round_sd':
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h:9156:11: error: cannot convert a value of type 'int' to vector type '__vector(2) double' which has different size
9156 | (__v2df) __B,__R);
| ^
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h: In function '_mm_roundscale_ss':
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h:14789:10: error: cannot convert a value of type 'int' to vector type '__vector(4) float' which has different size
14789 | _MM_FROUND_CUR_DIRECTION);
| ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h: In function '_mm_roundscale_sd':
/usr/local/gnu-cross/lib/gcc/x86_64-linux-gnu/9.2.0/include/avx512fintrin.h:14798:10: error: cannot convert a value of type 'int' to vector type '__vector(2) double' which has different size
14798 | _MM_FROUND_CUR_DIRECTION);
| ^~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [/home/<user>/src/gnu_src/env-prep/preshing/build-glibc/sysd-rules:77: /home/<user>/src/gnu_src/env-prep/preshing/build-glibc/nptl/elision-lock.o] Error 1
make[2]: Leaving directory '/home/<user>/src/gnu_src/env-prep/preshing/glibc-2.32/nptl'
make[1]: *** [Makefile:470: nptl/subdir_lib] Error 2
make[1]: Leaving directory '/home/<user>/src/gnu_src/env-prep/preshing/glibc-2.32'
make: *** [Makefile:9: all] Error 2
我不确定如何修复此错误,而且我在网上几乎找不到相关信息。我认为在编译时禁用 AVX 可能会解决这个问题,但如果可能的话,我想远离它(我在编译 glibc 时也没有看到直接的方法)。
我正在构建的源版本如下。我可以更改 glibc 版本,但其他版本需要保持不变(我正在比较特定于 GNU 的工具链和特定于 musl 的工具链)。
binutils-2.33.1
glibc-2.32
gcc-9.2.0
gmp-6.1.2
mpc-1.1.0
mpfr-4.0.2
我的系统有 gcc-10.2.1
和 glibc-2.31
。
我的不同配置如下:
# binutils
../binutils-2.33.1/configure --prefix=/usr/local/gnu-cross --target=x86_64-linux-gnu --disable-multilib --enable-deterministic-archives --disable-separate-code --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --with-sysroot=/usr/local/gnu-cross/x86_64-linux-gnu
# gcc
../gcc-9.2.0/configure \
--prefix=/usr/local/gnu-cross \
--target=x86_64-linux-gnu \
--build=x86_64-pc-linux-gnu \
--host=x86_64-pc-linux-gnu \
--with-sysroot=/usr/local/gnu-cross/x86_64-linux-gnu \
--with-native-system-header-dir=/include \
--enable-languages=c,c++ \
--enable-default-pie \
--disable-assembly \
--disable-werror \
--disable-multilib \
--enable-tls \
--disable-libmudflap \
--disable-libsanitizer \
--disable-gnu-indirect-function \
--disable-libmpx \
--enable-libstdcxx-time=rt
# glibc
../glibc-2.32/configure --prefix=/usr/local/gnu-cross/x86_64-linux-gnu --build=x86_64-pc-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-headers=/usr/local/gnu-cross/x86_64-linux-gnu/include --disable-multilib libc_cv_forced_unwind=yes
感谢您的帮助!
更新
我尝试将我的配置选项拨回上面链接文章中的基本选项,但我仍然遇到相同的错误。这让我相信错误是由于缺少步骤或文章中列出的步骤过时造成的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)