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

交叉编译链接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 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题