avr-ld: avr:51 输入文件“main.o”的体系结构与 avr 输出不兼容
avr-ld: avr:51 architecture of input file `main.o' is incompatible with avr output
我尝试在 ATmega1284p
上使用 this Code/Guide。
我遇到的问题是链接器不工作,执行后出现以下错误消息(代码构建良好ATmega88
):
avr-ld -o main.elf main.o -g
avr-ld: avr:51 architecture of input file `main.o' is incompatible with avr output
供参考
avr-gcc -v
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.8.2/lto-wrapper
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr
Thread model: single
完成构建说明
avr-gcc -std=c99 -g -Os -mmcu=atmega1284p -DF_CPU=8000000 -I. -DUART_BAUDRATE=57600 -Wstrict-prototypes -Wextra -ffunction-sections -fdata-sections -Wl,-gc-sections -o main.o -o main.o *.c
avr-ld -o main.elf main.o -g
avr-objcopy -j .text -j .data -O ihex main.o main.hex
avr-size -C --mcu=atmega1284p main.elf
main.o
的avr-objdump输出
avr-objdump -f main.o
main.o: Dateiformat elf32-avr
Architektur: avr:51, Flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
Startadresse 0x00000000
有一个解决方法可以强制 avr-ld
使用链接描述文件。
解决方法
如果 avr-ld 给出错误:
avr-ld: avr:51 architecture of input file 'main.o' is incompatible with avr output
您必须使用选项 -m
添加所需的体系结构,例如:
avr-ld -o main.elf main.o -g -mavr51
如果这不起作用,您将收到以下错误:
avr-ld: cannot open linker script file ldscripts/avr51.xn: No such file or directory
您必须强制使用带有 -T
选项的正确链接描述文件:
avr-ld -o main.elf main.o -g -mavr51 -T /usr/lib/avr/ldscripts/avr51.xn
并且链接器应该可以工作。
我尝试在 ATmega1284p
上使用 this Code/Guide。
我遇到的问题是链接器不工作,执行后出现以下错误消息(代码构建良好ATmega88
):
avr-ld -o main.elf main.o -g
avr-ld: avr:51 architecture of input file `main.o' is incompatible with avr output
供参考
avr-gcc -v
Using built-in specs.
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.8.2/lto-wrapper
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr
Thread model: single
完成构建说明
avr-gcc -std=c99 -g -Os -mmcu=atmega1284p -DF_CPU=8000000 -I. -DUART_BAUDRATE=57600 -Wstrict-prototypes -Wextra -ffunction-sections -fdata-sections -Wl,-gc-sections -o main.o -o main.o *.c
avr-ld -o main.elf main.o -g
avr-objcopy -j .text -j .data -O ihex main.o main.hex
avr-size -C --mcu=atmega1284p main.elf
main.o
的avr-objdump输出avr-objdump -f main.o
main.o: Dateiformat elf32-avr
Architektur: avr:51, Flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
Startadresse 0x00000000
有一个解决方法可以强制 avr-ld
使用链接描述文件。
解决方法
如果 avr-ld 给出错误:
avr-ld: avr:51 architecture of input file 'main.o' is incompatible with avr output
您必须使用选项 -m
添加所需的体系结构,例如:
avr-ld -o main.elf main.o -g -mavr51
如果这不起作用,您将收到以下错误:
avr-ld: cannot open linker script file ldscripts/avr51.xn: No such file or directory
您必须强制使用带有 -T
选项的正确链接描述文件:
avr-ld -o main.elf main.o -g -mavr51 -T /usr/lib/avr/ldscripts/avr51.xn
并且链接器应该可以工作。