2011-12-15 9 views
0

私はアーム・ブート・ローダーを構築しようとしており、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のを攻撃し、他の人が従う願っていますについて。私は(のlibcのnewlibのバージョンである、私は信じている、)nm /usr/arm-elf/lib/thumb/libc.aを実行すると、それは示しています

lib_a-memcpy.o: 
00000010 N $d 
00000000 t $t 
00000001 T memcpy 

だから、それはmemcpyのは、ライブラリで定義されていることを示しています。

上記のldコマンドでstraceを実行して、実際にそのファイルを確認していることを確認してください。

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

答えて

2

これは魚になります

-lc -nostdlibs 

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

この記事では、内部実装(_udivsi3.oなど)をリンクしています。 libgcc.aとリンクしてみてください。必要なすべての組み込み関数の定義が必要です。

+0

ファイルを直接リンクしましたが、なぜ '-lc'と' -L'を組み合わせたのが '-nostdlib'がなくてもうまくいかないのはまだ分かりません。何か案は? –

関連する問題