1

私の英語が下手でごめんなさい。がんばります :)

Casio グラフィック電卓用のアドインを C でコンパイルしようとしています。これは、公式 SDK を使用すると問題なく動作します。Windowsでしか使えないのでgccを使いたい。

それで、sh-rtems-gccを入手しました。これは macports の binutils であり、この指示に従ってプログラムをコンパイルしようとしました。説明したaddin.ldcrt0.sをコピーして貼り付け、main.clibfxsys.a 上記の指示と同じ人から)を同じディレクトリに配置しました。サブディレクトリインクルードには、fxsys のヘッダーが含まれています。nmで.aファイルにライブラリのすべての関数が存在することを確認しました。

このコマンドをコンパイルに使用する場合:

sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -I./include -c crt0.s main.c

すべて正常に動作します。しかし、次にリンクしようとしています:

sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -L. -o myaddin.elf -Taddin.ld crt0.o main.o -lfxsys

次のエラーが表示されます。

main.o: In function `__main':
main.c:(.text+0x248): undefined reference to `_Bdisp_AllClr_VRAM'
...     
... (--- cut 16 other errors in the same format ---)
...
main.c:(.text+0x360): undefined reference to `_Sleep'
./libfxsys.a(locate.o): In function `_locate':
locate.c:(.text+0x28): undefined reference to `_locate_OS'
collect2: ld gab 1 als Ende-Status zurück

欠落しているシンボルはすべてlibfxsys.aにあります。nmで確認しました。

これは、Googleで見つかった他の投稿で失敗の原因としてよく言及されていますが、成功していないため、コマンドでライブラリの位置を既に試しました。上記の手順で使用されている-lgccオプションの追加と削除も試みましたが、成功しませんでした。

私のホスト マシンは Intel Mac、OS X 10.6 です。

この問題を解決してプログラムをコンパイルする方法がわからないので、質問する必要があります。何が間違っているのですか? SDK を使用せずにプログラムをコンパイルするにはどうすればよいですか?

前もって感謝します、 xythobuz

編集:

私もリンクしようとしました:

sh-rtems-ld -EB -L. -o myaddin.elf -Taddin.ld crt0.o --start-group main.o libfxsys.a --end-group

ただし、上記と同じ出力が生成されます。

4

1 に答える 1

1

正確な問題は言えませんが、次のように調査します。

  1. 不足しているシンボルを含むライブラリを見つけます。nmシンボル名を表示するために使用します
  2. どのライブラリにシンボルが含まれているかがわかったら、正しい順序でリンクしていることを確認してください。-( -)リンカーで再帰的なシンボル解決オプションを使用してみて ください。
于 2010-12-22T15:05:36.633 に答える