gpt4 book ai didi

c++ - GCC:libstdc++。so:添加sybols时出错:格式错误的文件

转载 作者:行者123 更新时间:2023-12-02 10:26:38 25 4
gpt4 key购买 nike

我正在尝试使用gcc(arch community repo上的riscv版本)编译gd32v芯片。
编译似乎工作正常,但是当尝试将对象链接到elf文件时,出现错误:

Linking ELF target: main.elf
riscv64-linux-gnu-g++ @_linker_flags -o main.elf ../../bmptk-RISC-V/targets/risc_v/gd32v/gd32vf103xb_boot.o hwlib.o main.o ../../bmptk-RISC-V/targets/risc_v/GD32VF103_standard_peripheral/Source/gd32vf103_rcu.o ../../bmptk-RISC-V/targets/risc_v/GD32VF103_standard_peripheral/Source/gd32vf103_gpio.o ../../bmptk-RISC-V/targets/risc_v/GD32VF103_standard_peripheral/system_gd32vf103.o bmptk_heap_none.o bmptk_fixed_size_stack.o -Os -Tmain.ld
/usr/lib/gcc/riscv64-linux-gnu/10.2.0/../../../../riscv64-linux-gnu/bin/ld: /usr/lib/gcc/riscv64-linux-gnu/10.2.0/../../../../riscv64-linux-gnu/lib/libstdc++.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make: *** [../../bmptk-RISC-V/Makefile.inc:1498: main.elf] Error 1
在此make规则中,我为链接器标志使用文件“_linker_flags”,以在编译期间保持终端的清洁。该文件的内容如下:
-march=rv32imac -mabi=ilp32 -Os -fdata-sections -ffunction-sections -I../../bmptk-RISC-V/targets/risc_v/ -I../../bmptk-RISC-V/targets/risc_v/GD32VF103_standard_peripheral -I../../bmptk-RISC-V/targets/risc_v/GD32VF103_standard_peripheral/Include -I../../bmptk-RISC-V/targets/risc_v/RISCV/drivers -I../../bmptk-RISC-V/targets/risc_v -I/usr/include -I/usr/include -I../../hwlib-RISC-V/library -I../../Catch2/single_include -I../../Catch2/single_include/catch2 -I../../boost_1_69_0 -I../../bmptk-RISC-V -I../../bmptk-RISC-V/targets -I../../bmptk-RISC-V/targets/risc_v -I../../bmptk-RISC-V/targets/risc_v/RISCV -I../../bmptk-RISC-V/targets/risc_v/RISCV/drivers -DHWCPP_FAKE_OSTREAM -DBMPTK_TARGET=gd32vf103v -DBMPTK_TARGET_gd32vf103v -DHWLIB_TARGET_gd32vf103v -DHWCPP_TARGET_gd32vf103v -DGF_TARGET_gd32vf103v -DBMPTK_CHIP=gd32vf103v -DBMPTK_CHIP_gd32vf103v -DBMPTK_XTAL= -DBMPTK_BAUDRATE=38400 -DHWLIB_BAUDRATE=38400 -DGODAFOSS_BAUDRATE=38400 -DGF_BAUDRATE=38400 -DBMPTK_VERSION=V04_00_work_in_progress_2020_05_23 -DBMPTK_EMBEDDED -lgcc -Wl,-Map,main.map -Wl,--gc-sections -Wl,-fatal-warnings
我不熟悉此错误,有人知道我要解决此问题吗?
编辑:
我问学校的一位老师,他们告诉我问题很可能是由于使用不匹配的链接器和编译器引起的,或者在调用make时未清除某些目标文件。我确保在编译之前删除所有对象,并确保编译器和链接器相同。
它们应该是相同的。我正在运行riscv64-linux-gnu-ld版本2.35和riscv64-linux-gnu-g++版本10.2.0。两者都来自arch社区存储库。

最佳答案

要确切查看编译器支持的库的映射/开关,可以使用:riscv64-linux-gnu-g++ -print-multi-lib。如果编译器是在启用multilib的情况下编译的,则可以选择不带硬浮点数的rv32库,否则它也不会链接,因为您是rv32imac的编译器。
如果编译器是在没有multlib选项的情况下构建的,则有两个选择:
使用-nostdlib进行编译,并将所需的文件提供给链接器crt,libc libgcc ...,或者您可以获取已启用multilib构建的编译器。

关于c++ - GCC:libstdc++。so:添加sybols时出错:格式错误的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64243411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com