1

カーネル モードの VxWorks 6.6 でブースト ヘッダーのみのプロパティ ツリー ライブラリを使用しようとしていますがstd::runtime_error::~runtime_error、DKM をロードするときに未定義のシンボルが表示されます。何か案は?直接使用する場合std::runtime_errorは問題ありませんが、Boost ではほとんど成功していないようです。

Boost を使用したいのですが、多くの問題が発生しているようです。

4

1 に答える 1

4

DKM を使用する場合、翻訳単位の部分的なリンクのみを行うことに注意してください。これが、DKM に未解決のシンボルを含めることができる理由です。

たとえば、printf を使用する場合、DKM が部分的にリンクされている場合、異なる vxWorks イメージ間で異なる可能性があるため、printf 関数のアドレスが何であるかがわかりません。

DKM をロードすると、vxworks ダイナミック ローダーが DKM を調べて、DKM 内のすべての未解決のシンボルを見つけ、それらをカーネル内のシンボルと照合します。

あなたが実行しているのは、コードがおそらくテンプレートベースであり、ロード時までインスタンス化されず、テンプレートの一部に runtime_error クラスへの参照があると思われます。

ただし、コードは runtime_error クラスを明示的にインスタンス化または使用しないため、ローダーには未解決のシンボルとして表示されます。テンプレートは、動的な読み込み状況では扱いにくいものになる可能性があります。

リンカーは、「問題ありません。動的ローダーが処理します」と考えます。残念なことに、ローダーはこの未解決のシンボルを見て、「ねえ... runtime_error について何も知らない」と大声で言います。

これが、ドキュメントに (言い換え) と記載されている理由です。

2 つの解決策が利用可能です

b) ベース vxWorks イメージで DKM を静的にリンクします (これにより、動的またはダウンロード可能ではなくなります)。

(DKM の代わりに) RTP を使用する場合、RTP は部分的にリンクされているのではなく、完全にリンクされているため、この特定の問題は発生しません。

于 2011-02-14T21:50:36.797 に答える