arm 부트 로더를 빌드하려고하는데, newlib에 의존하여 (memcpy와 같은) 일부 시스템 호출을 제공합니다.newlib와 연결 : memcpy에 대한 정의되지 않은 참조
나는 실행하면, 지금은
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'
나는 방어 적이기를 공격하고, 다른 사람들이 따라 바라고 있어요 :
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
나는 다음과 같은 얻을. 그래서
lib_a-memcpy.o:
00000010 N $d
00000000 t $t
00000001 T memcpy
그 방어 적이기는 라이브러리에 정의되어 있음을 보여줍니다 : 나는 nm /usr/arm-elf/lib/thumb/libc.a
를 실행하면 보여줍니다 (내가 생각하는, libc의의 newlib에 버전입니다).
위의 ld
명령에서 strace
을 실행하여 파일을 실제로보고 있는지 확인했습니다. 실제로는 그렇습니다.
무엇이 여기에 있습니까? 왜 정의되지 않은 memcpy에 대해 불평합니까?
파일을 직접 연결했는데, 왜'-lc'와'-L'가 결합 된 것이'-nostdlib' 없이도 작동하지 않는지 아직 확실하지는 않습니다. 어떤 아이디어? –