【问题标题】:can't link double-float modules with soft-float modules riscv compiler无法将双浮点模块与软浮点模块 riscv 编译器链接
【发布时间】:2020-11-27 11:42:02
【问题描述】:

我正在使用 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) 

【问题讨论】:

  • 你的目标是软 FP 还是硬 FP?链接器抱怨不匹配,但哪一半是错误的?

标签: linux gcc cmake riscv buildroot


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    由于代表太低,无法发表评论, 但是您是否尝试过添加 -msoft-float 标志 您还在哪里运行该命令/程序,例如硬件规格? 根据您的硬件规格,它可能完全相反,因此您应该尽量避免使用双关键字 你也可以分享一些代码吗?

    【讨论】:

    • 您的评论很有帮助。使用 -mfloat-abi=softfp 有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多