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を生成したのと同じモジュールにあります......