3

IDE WindRiver Workbench を使用して DKM プロジェクトをコンパイルします。正常にコンパイルされます。しかし、「ld」コマンドは次のように不平を言って失敗します。

Warning: module 0x1e2f0b8 holds reference to undefined symbol __GOTT_BASE__.
Warning: module 0x1e2f0b8 holds reference to undefined symbol __GOTT_INDEX__.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Assert.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stoul.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getpctype.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stderr.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getptoupper.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Getptolower.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stod.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Flt.
Warning: module 0x1e2f0b8 holds reference to undefined symbol _Stdout.
ld(): error loading file (errno = 0xe0005).
4

1 に答える 1

6

上記のシンボルがシステム シンボル テーブルで解決できないため、これらのエラーが発生します。

VxWorks Kernel Programmer's Guide 6.8 の ch. 16.3.7 (読み込みに関する非常に役立つ章)

システム シンボル テーブルは、システムに既にインストールされている関数と変数の名前とアドレスを格納するために使用されます。これには、シンボルがシステム シンボル テーブルにインストールされると、ロードされた任意のモジュールによる将来のリンクに使用できるという副作用があります。さらに、モジュール内の未定義シンボルを解決しようとすると、ローダーはターゲット イメージにコンパイルされたすべてのグローバル シンボルと、以前にロードされたモジュールのすべてのグローバル シンボルを使用します。

チップ:

  • モジュールをロードする順序が正しいことを確認してください。後で別の DKM にシンボルをロードすると、その DKM でのロードは失敗します。

[...] モジュールをロードするときは、モジュール間の依存関係を考慮して、VxWorks イメージにコンパイルされたコードまたはシステムに既にロードされているモジュールのいずれかを使用して、新しいモジュールごとに参照を解決できるようにする必要があります。そうしないと、コードの解決が不完全になります [...]

  • 「lkup」コマンドは、以前にロードされたシンボルを見つけるのに役立ちます
于 2013-05-13T11:12:05.213 に答える