Linker Arm sourcery工具链链接错误

Linker Arm sourcery工具链链接错误,linker,arm,gnu-toolchain,codesourcery,Linker,Arm,Gnu Toolchain,Codesourcery,我想在我的函数中使用标准c函数 void print(const char* format,...) { char buffer[256]; va_list args; va_start (args, format); vsnprintf (buffer,256,format, args); va_end (args); sendString(buffer); } 错误来了 arm-none-eabi-ld -o check.elf -

我想在我的函数中使用标准c函数

void print(const char* format,...) {    
    char buffer[256];
    va_list args;
    va_start (args, format);
    vsnprintf (buffer,256,format, args);
    va_end (args);
    sendString(buffer);
}
错误来了

arm-none-eabi-ld  -o check.elf -T /home/sanju/Arm/check/other/ROM.ld Serial.o irq.o lowlevel.o main.o startup.o \
-L/usr/arm-none-eabi/lib   -lc -lg  -lm
/usr/arm-none-eabi/lib/libc.a(lib_a-svfprintf.o): In function `_svfprintf_r':
vfprintf.c:(.text+0x688): undefined reference to `__aeabi_dcmplt'
vfprintf.c:(.text+0xdfc): undefined reference to `__aeabi_dcmpeq'
vfprintf.c:(.text+0x10b4): undefined reference to `__aeabi_dcmpeq'
vfprintf.c:(.text+0x168c): undefined reference to `__aeabi_uldivmod'
vfprintf.c:(.text+0x16a8): undefined reference to `__aeabi_uldivmod'
vfprintf.c:(.text+0x1a48): undefined reference to `__aeabi_dcmpeq'
vfprintf.c:(.text+0x1eac): undefined reference to `__aeabi_dcmpeq'
/usr/arm-none-eabi/lib/libc.a(lib_a-dtoa.o): In function `quorem':
dtoa.c:(.text+0x3c): undefined reference to `__aeabi_uidiv'
/usr/arm-none-eabi/lib/libc.a(lib_a-dtoa.o): In function `_dtoa_r':
dtoa.c:(.text+0x274): undefined reference to `__aeabi_dcmpeq'
dtoa.c:(.text+0x360): undefined reference to `__aeabi_ui2d'
dtoa.c:(.text+0x37c): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x388): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x394): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0x3a4): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x3b0): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x3c4): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0x3d0): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0x3e8): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0x418): undefined reference to `__aeabi_dcmpgt'
dtoa.c:(.text+0x5a8): undefined reference to `__aeabi_ddiv'
dtoa.c:(.text+0x5ac): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0x5b4): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x5c0): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x5d4): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x608): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x61c): undefined reference to `__aeabi_dcmpeq'
dtoa.c:(.text+0x650): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x664): undefined reference to `__aeabi_dcmpeq'
dtoa.c:(.text+0x684): undefined reference to `__aeabi_ddiv'
dtoa.c:(.text+0x688): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0x690): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x69c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x6b0): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x6fc): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0x718): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0x73c): undefined reference to `__aeabi_dcmpeq'
dtoa.c:(.text+0xa94): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0xaa0): undefined reference to `__aeabi_dcmpeq'
dtoa.c:(.text+0xbf8): undefined reference to `__aeabi_ddiv'
dtoa.c:(.text+0xc2c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0xc58): undefined reference to `__aeabi_ddiv'
dtoa.c:(.text+0xc80): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0xc90): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0xc9c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0xca8): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0xce8): undefined reference to `__aeabi_ddiv'
dtoa.c:(.text+0xcf4): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xd08): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0xd10): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0xd24): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xd54): undefined reference to `__aeabi_dcmpgt'
dtoa.c:(.text+0xd78): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xd8c): undefined reference to `__aeabi_dcmpgt'
dtoa.c:(.text+0xdd0): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xddc): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0xe00): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0xe1c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0xe28): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0xe30): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0xe44): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xe64): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0xef0): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0xefc): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0xf08): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0xf24): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0xf38): undefined reference to `__aeabi_dcmpgt'
dtoa.c:(.text+0xf54): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0x10c0): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x10e8): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x1130): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x1144): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0x114c): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x1160): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x119c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x11a8): undefined reference to `__aeabi_d2iz'
dtoa.c:(.text+0x11b0): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x11c8): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x1200): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0x120c): undefined reference to `__aeabi_dcmplt'
dtoa.c:(.text+0x12cc): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x12d8): undefined reference to `__aeabi_dcmpge'
dtoa.c:(.text+0x158c): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x159c): undefined reference to `__aeabi_i2d'
dtoa.c:(.text+0x15b0): undefined reference to `__aeabi_dmul'
dtoa.c:(.text+0x15bc): undefined reference to `__aeabi_dadd'
dtoa.c:(.text+0x15ec): undefined reference to `__aeabi_dsub'
dtoa.c:(.text+0x15f8): undefined reference to `__aeabi_dcmpgt'
/usr/arm-none-eabi/lib/libc.a(lib_a-mprec.o): In function `__ratio':
mprec.c:(.text+0xbc0): undefined reference to `__aeabi_ddiv'
/usr/arm-none-eabi/lib/libc.a(lib_a-mprec.o): In function `_mprec_log10':
mprec.c:(.text+0xbf0): undefined reference to `__aeabi_dmul'
/usr/arm-none-eabi/lib/libc.a(lib_a-svfiprintf.o): In function `_svfiprintf_r':
vfprintf.c:(.text+0xf30): undefined reference to `__aeabi_uldivmod'
vfprintf.c:(.text+0xf4c): undefined reference to `__aeabi_uldivmod'
make: *** [all] Error 1
*** Failure: Exit code 2 ***
我的makefile是这个

TOOLCHAIN=arm-none-eabi-

ARM_CPU=arm7tdmi

VPATH= /home/sanju/Arm/check/src /home/sanju/Arm/check/other /home/sanju/Arm/check/include

INCLUDE= /home/sanju/Arm/check/include

CCFLAGS= -mcpu=$(ARM_CPU) -mthumb-interwork -ffunction-sections -Os -Wall

ASFLAGS= -mcpu=$(ARM_CPU) -mthumb-interwork -mfpu=softfpa -Wall


all: Serial.o irq.o lowlevel.o main.o startup.o 

    $(TOOLCHAIN)ld  -o check.elf -T /home/sanju/Arm/check/other/ROM.ld Serial.o irq.o 
lowlevel.o main.o startup.o \

    -L/usr/arm-none-eabi/lib   -lc -lg  -lm

    $(TOOLCHAIN)objcopy -O ihex check.elf check.hex 

    $(TOOLCHAIN)objcopy -O binary check.elf check.bin 



Serial.o : Serial.c Serial.h

    $(TOOLCHAIN)gcc $(CCFLAGS) -I$(INCLUDE) -c $< 


irq.o : irq.c irq.h lpc214x.h

    $(TOOLCHAIN)gcc $(CCFLAGS) -I$(INCLUDE) -c $< 


lowlevel.o : lowlevel.c lowlevel.h

    $(TOOLCHAIN)gcc $(CCFLAGS) -I$(INCLUDE) -c $< 



main.o : main.c lpc214x.h timer0.h Asm.h lowlevel.h type.h Serial.h

    $(TOOLCHAIN)gcc $(CCFLAGS) -I$(INCLUDE) -c $< 

startup.o : startup.S 

    $(TOOLCHAIN)as $(ASFLAGS) -o startup.o $< 




.PHONY: clean 

clean : 

    rm -rf *.o  *.elf *.hex *.o *.bin 
工具链=臂无eabi-
ARM_CPU=arm7tdmi
VPATH=/home/sanju/Arm/check/src/home/sanju/Arm/check/other/home/sanju/Arm/check/include
INCLUDE=/home/sanju/Arm/check/INCLUDE
CCFLAGS=-mcpu=$(ARM\U CPU)-mthumb互通-F功能部分-Os-Wall
ASFLAGS=-mcpu=$(ARM\U CPU)-mthumb互通-mfpu=softfpa-Wall
所有:Serial.o irq.o lowlevel.o main.o startup.o
$(工具链)ld-o check.elf-T/home/sanju/Arm/check/other/ROM.ld Serial.o irq.o
低级别.o main.o startup.o\
-L/usr/arm none eabi/lib-lc-lg-lm
$(工具链)对象复制-O ihex check.elf check.hex
$(工具链)objcopy-O binary check.elf check.bin
Serial.o:Serial.c Serial.h
$(工具链)gcc$(CCFLAGS)-I$(包括)-c$<
irq.o:irq.c irq.h lpc214x.h
$(工具链)gcc$(CCFLAGS)-I$(包括)-c$<
lowlevel.o:lowlevel.c lowlevel.h
$(工具链)gcc$(CCFLAGS)-I$(包括)-c$<
main.o:main.c lpc214x.h timer0.h Asm.h lowlevel.h type.h Serial.h
$(工具链)gcc$(CCFLAGS)-I$(包括)-c$<
startup.o:startup.S
$(工具链)作为$(ASFLAGS)-o startup.o$<
.假冒:干净
清洁:
rm-rf*.o*.elf*.hex*.o*.bin

在目标中,它链接失败。我用arm elf工具链尝试过这个例子,也遇到了一些错误。我在谷歌上搜索了很多,但没有找到任何解决方案。

在-L中添加“-lgcc”是否会更好?

尝试使用
gcc
作为
ld
前端。 更改:

进入


GCC知道在调用
ld
而不是使用
ld
链接时添加一些必要的选项,我使用了
GCC
,但它包含了提供的
crt.o
对象文件,所以我使用了
-nostartfiles
,它对我有效。

我尝试过,但我使用的是linux操作系统,所以没有使用-lgcc-lg我补充说我使用了gcc而不是ld,但我得到了一些其他的,因为gcc尝试将它与一些crt.o链接,并且该文件的一些符号未定义。我通过Google发现了这个问题,这实际上解决了我的问题。为什么
gcc
ld
更聪明?那么,我们是否应该停止使用
ld
而支持
gcc
呢?请注意,
gcc
只是
ld
的前端。它可以告诉您实际使用的
ld
命令行。
$(TOOLCHAIN)ld  -o check.elf [...]
$(TOOLCHAIN)gcc  -o check.elf [...]