韦东山Linux嵌入式课程社区
直播中

于佳

7年用户 267经验值
私信 关注

请问vsprintf()函数中哪个库没有链接进来?

写的裸奔程序中,用到vsprintf()函数,无法链接成功。
最初是使用vfprintf()函数的,编译链接都没问题,可是代码过大(768MB),gg以后得知,不是向文件输出的话,应该使用vsprintf(),但是替换函数后,链接出错了。
请教一下是什么问题呐?
我想可能是vsprintf()需要的什么库没有链接进来吧,但是不知道是哪个库。

Makefile如下:
objs1:= output/Head.o output/Init.o output/MMU.o output/Nand_K9F2G08U0B.o output/Interrupt.o
objs2:= output/Test.o output/TFTLCD.o output/Common.o output/UART.o
objs := $(objs1) $(objs2)

lib1 := /home/long/gcc-3.4.5-glibc-2.3.6/lib/gcc/ARM-linux/3.4.5/
lib2 := /home/long/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/

Test.bin : $(objs)
               arm-linux-ld -TTest.lds -L$(lib1) -o output/Test.elf $^ $(lib2)libc.a -lgcc
               arm-linux-objcopy -O binary -S output/Test.elf $@
               arm-linux-objdump -D -m arm output/Test.elf > output/Test.dis

output/%.o : source/%.c
               arm-linux-gcc -Wall -O2 -c -o $@ $<

output/%.o : source/%.s
               arm-linux-gcc -Wall -O2 -c -o $@ $<

clean:
               rm -f output/Test.elf output/Test.dis output/*.o Test.bin

函数代码如下:
void UART_Printf( unsigned int iUARtiD, const char *pFmt, ... )
{
            S32 i;
            S8 UART_TxBuffer[128];
            va_list ap;

            va_start( ap, pFmt );
            vsprintf( UART_TxBuffer, pFmt, ap );
            va_end( ap );

           for( i = 0 ; UART_TxBuffer != '' ; i++ )
                          UART_PutChar( iUARTID, UART_TxBuffer );
           UART_PutChar( iUARTID, '' );
}

错误信息如下:
arm-linux-ld: section __libc_atexit [000013b0 -> 000013b3] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .rodata [000013b4 -> 000101bb] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .rodata.str1.4 [000101bc -> 00013db1] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section __libc_subfreeres [00013db4 -> 00013dd7] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .gnu.linkonce.r.__strtol_ul_max_tab [00013dd8 -> 00013e63] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .gnu.linkonce.r.__strtol_ul_rem_tab [00013e64 -> 00013e86] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .rodata.str4.4 [00013e88 -> 000143e3] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .gnu.linkonce.r.__strtol_ull_max_tab [000143e4 -> 000144fb] overlaps section second [00001000 -> 00080c6b]
arm-linux-ld: section .gnu.linkonce.r.__strtol_ull_rem_tab [000144fc -> 0001451e] overlaps section second [00001000 -> 00080c6b]
make: *** [Test.bin] Error 1

回帖(7)

张琨

2019-7-3 09:23:30
printf 函数问题的解决:可以用亲测  如需uart完整源码  以后再说
举报

张大妍

2019-7-3 09:31:06
谢谢,朋友。
举报

高群

2019-7-3 09:45:53
回复 3楼zyp568的帖子

你代码做过搬运没  就是从nand 到ddr  我做的搬运 不成功啊 讨论讨论
举报

刘强

2019-7-3 10:03:14
做过搬运的,你搬运不成功的话,可以单独试试你的nand驱动是否管用了。
我做LCD的时候,发现一个奇怪的问题,开启MMU的时候,0x3000_0000只能映射到0x3000_0000,映射到别的地方,LCD显示就不正常了,还没找到原因。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分