不能 link double-float modules with soft-float modules riscv compiler

can't link double-float modules with soft-float modules riscv compiler

我正在使用 riscv 编译器构建程序,当链接过程开始时,我遇到以下问题:

/home/luna/noelv-buildroot/output/images/riscv64-buildroot-linux-musl_sdk-buildroot/bin/../lib/gcc/riscv64-buildroot-linux-musl/8.3.0/../../../../riscv64-buildroot-linux-musl/bin/ld: /home/luna/noelv-buildroot/output/images/riscv64-buildroot-linux-musl_sdk-buildroot/bin/../lib/gcc/riscv64-buildroot-linux-musl/8.3.0/libgcc.a(_clzsi2.o): can't link double-float modules with soft-float modules

我正在使用编译器来编译和链接我的代码。这是我的编译器:

$ riscv64-linux-gcc --verbose 
COLLECT_GCC=/home/luna/noelv-buildroot/output/images/riscv64-buildroot-linux-musl_sdk-buildroot/bin/riscv64-linux-gcc.br_real
COLLECT_LTO_WRAPPER=/home/luna/noelv-buildroot/output/images/riscv64-buildroot-linux-musl_sdk-buildroot/bin/../libexec/gcc/riscv64-buildroot-linux-musl/8.3.0/lto-wrapper
Configured with ./configure --prefix=/home/luna/noelv-buildroot/output/host --sysconfdir=/home/luna/noelv-buildroot/output/host/etc --enable-static --target=riscv64-buildroot-linux-musl --with-sysroot=/home/luna/noelv-buildroot/output/host/riscv64-buildroot-linux-musl/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/home/luna/noelv-buildroot/output/host --with-mpc=/home/luna/noelv-buildroot/output/host --with-mpfr=/home/luna/noelv-buildroot/output/host --with-pkgversion='Buildroot 2020.02' --with-bugurl=http://bugs.buildroot.net/ --disable-libmpx --disable-libquadmath --disable-libsanitizer --enable-tls --enable-threads --without-isl --without-cloog --with-arch=rv64imafd --with-abi=lp64d --enable-languages=c,c++ --with-build-time-tools=/home/luna/noelv-buildroot/output/host/riscv64-buildroot-linux-musl/bin --enable-shared --disable-libgomp
Modelo de hilos: posix
gcc version 8.3.0 (Buildroot 2020.02) 

无法发表评论,因为代表太低, 但是您是否尝试过添加 -msoft-float 标志 另外,您 运行 和 command/program 在哪里,比如硬件规格? 根据您的硬件规格,它可能完全相反,因此您应该尽量避免使用 double 关键字 你能分享一些代码吗?

您的编译器是使用 disable-multilib 和 rv64imafd arch 构建的。所以基本上编译器提供的所有库都是为这个arch编译的。

如果您尝试使用其他 arch 编译一些代码,默认情况下您将无法 link 反对它。另外,如果你提供了一个库,你需要确保它是为这个 arch 编译的,以便与工具链提供的库同时使用。

您可以使用 readelf -h 查看库的确切架构和 abi。