名字不能取太长 2023-03-11 12:14 采纳率: 78%
浏览 89
已结题

交叉编译链接opensbi的libsbi.o静态库时遇到了问题

我在x64架构的ubuntu上交叉编译链接opensbi的libsbi.o静态库时出现了链接错误,如下

riscv64-unknown-elf-ld: lib/libsbi.a(sbi_console.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_console.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_hart.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_hart.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_math.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_math.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_hfence.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_hfence.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_pmu.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_pmu.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_scratch.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_scratch.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_string.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_string.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_expected_trap.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_expected_trap.o)
riscv64-unknown-elf-ld: lib/libsbi.a(riscv_asm.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(riscv_asm.o)
riscv64-unknown-elf-ld: lib/libsbi.a(riscv_hardfp.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(riscv_hardfp.o)
riscv64-unknown-elf-ld: lib/libsbi.a(riscv_locks.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(riscv_locks.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_bitops.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_bitops.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_domain.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_domain.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_hsm.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_hsm.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_init.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_init.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ipi.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ipi.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_irqchip.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_irqchip.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_platform.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_platform.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_system.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_system.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_timer.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_timer.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_tlb.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_tlb.o)
riscv64-unknown-elf-ld: lib/libsbi.a(riscv_atomic.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(riscv_atomic.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_exts.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_exts.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_time.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_time.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_rfence.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_rfence.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_ipi.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_ipi.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_base.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_base.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_hsm.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_hsm.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_srst.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_srst.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_susp.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_susp.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_pmu.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_pmu.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_dbcn.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_dbcn.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_legacy.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_legacy.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_ecall_vendor.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_ecall_vendor.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_bitmap.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_bitmap.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_fifo.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_fifo.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_trap.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_trap.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_unpriv.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_unpriv.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_illegal_insn.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_illegal_insn.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_misaligned_ldst.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_misaligned_ldst.o)
riscv64-unknown-elf-ld: lib/libsbi.a(sbi_emulate_csr.o): can't link soft-float modules with double-float modules
riscv64-unknown-elf-ld: failed to merge target specific data of file lib/libsbi.a(sbi_emulate_csr.o)

网上的解决方案好像没有用,想问问怎么回事呀?如何解决?

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-11 12:39
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这个错误信息显示,编译器无法将支持软浮点运算的代码和支持双精度浮点运算的代码链接到同一个程序中。建议检查您是否使用了正确的编译器和标志,以确保您的代码和库都使用相同的浮点模式。
    ·
    一种可能的解决方法是在编译和链接时指定使用相同的浮点模式,例如,如果您的代码使用软浮点,则需要使用相应的标志将库编译为软浮点。具体而言,可以在编译选项中添加-msoft-float标志。例如,您可以使用以下命令编译libsbi.o:

    riscv64-unknown-elf-gcc -march=rv64imac -mabi=lp64 -mcmodel=medlow -Os -I./include -nostdinc -nostdlib -fno-builtin -msoft-float -c lib/sbi.S -o lib/libsbi.o
    

    请注意,此标志必须用于编译所有与该库链接的代码。

    另一种可能的解决方法是确保您使用的编译器和库都支持相同的浮点模式。如果您使用的是第三方库,请确保该库支持您使用的浮点模式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助