2

VxWorks RTP のシステム シンボル テーブルを使用する前の質問からの続きです。

既存の vxworks カーネル モジュールを RTP に移植していますが、実際の機能の多くは、他の「ダウンロード可能な」カーネル モジュールに組み込まれています。これらは (起動プロセスの一部として) loadModule を使用して読み込まれるため、RTP が実行される時点でシステム シンボル テーブルにあるはずです。]

ただし、RTP をビルドできず、リンカーから未定義の参照に関するエラーが発生します。

これらの関数への参照を無視するようにリンカーを説得するにはどうすればよいですか? -Xbind-lazy -non-static オプションをリンカに渡しています。

たとえば、カーネル モジュール (database.out としてビルド) には、次のようなコードが含まれている場合があります。

void writeDatabaseValue(int , char*);

私のRTPアプリケーションコードは通常の方法でそれを呼び出します

void main (int)
{
     //do some stuff
     writeDatabaseValue(0,"foo");  //Linker error here
     taskDelay(100);  //but no linker error here
}

database.outを使用してリンク行に追加しようとしましたが-l:database.out、これにより writeDatabaseValue への参照が解決されますが、リンカーがdatabase.outすべての標準 vxworks API 呼び出しを含むすべての s 参照を解決しようとするため、依存地獄に陥ります。

EDIT:さらに複雑にするために、呼び出したいカーネルモジュールコードの一部は、実際にRTPを生成したのと同じモジュールにあります......

4

1 に答える 1