0

私はarmブートローダーを構築しようとしていますが、いくつかのシステムコール(memcpyなど)を提供するためにnewlibに依存しています。

私が走るとき:

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がライブラリで定義されていることを示しています。

上記のコマンドを実行straceして、実際にそのファイルを参照していることを確認しました。実際、実際に確認しています。ld

ここで何が欠けていますか?未定義のmemcpyについて不平を言うのはなぜですか?

4

1 に答える 1

2

これは怪しいようです:

-lc -nostdlibs

-nostdlibsが-lcをキャンセルしていると思います。libc.aを直接リンクして、何が起こるかを確認してください。

あなたがそれに取り組んでいる間、私はあなたがいくつかの本質的な実装(_udivsi3.oのような)にリンクしているのを見ます。libgcc.aとリンクしてみてください。必要な、すべての組み込み関数の定義が含まれている必要があります。

于 2011-12-16T03:04:15.347 に答える