0
我試圖構建一個arm引導裝載程序,它依靠newlib提供一些系統調用(如memcpy)。與newlib鏈接:未定義引用memcpy
當我運行:
arm-elf-ld -static -L /usr/arm-elf/lib/thumb/ -lc -nostdlib -nostartfile -Map=loader.map --cref -T loader.lds --gc-sections -Ttext 0x000000 -n -o loader.elf start.o _udivsi3.o _umodsi3.o main.o util.o gpio.o spi.o flashatmel.o flashjedec.o image.o time.o clock.o led.o register.o sdram.o
我得到如下:
flashatmel.o flashjedec.o image.o time.o clock.o led.o register.o sdram.o
main.o: In function `TtyPutConfiguration':
/home/shawn/projects/netbridge-fx/loader/main.c:19: undefined reference to `memcpy'
main.o: In function `main':
/home/shawn/projects/netbridge-fx/loader/main.c:135: undefined reference to `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:145: undefined reference to `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:155: undefined reference to `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:165: undefined reference to `__gnu_thumb1_case_uqi'
gpio.o: In function `GpioTest':
/home/shawn/projects/netbridge-fx/loader/gpio.c:139: undefined reference to `__gnu_thumb1_case_uqi'
現在,我攻擊的memcpy,並希望其他人跟着。當我運行nm /usr/arm-elf/lib/thumb/libc.a
(我相信它,是libc中的newlib版),它表明:
lib_a-memcpy.o:
00000010 N $d
00000000 t $t
00000001 T memcpy
所以,這表明的memcpy在庫中定義。
我在上面的ld
命令上運行了strace
以確保它實際上正在查看該文件,實際上它是。
我在這裏錯過了什麼?爲什麼它抱怨未定義的memcpy?
鏈接文件直接工作,雖然我仍不確定爲什麼`-lc`與`-L`結合不起作用,即使沒有`-nostdlib`。有任何想法嗎? – 2011-12-16 16:58:21