3

これは、昨日投稿したこの質問の一種のフォローアップです。私の問題は、リンクするランタイム C++ ライブラリに関するものです。Qt をフレームワークとして使用し、QtCreator を IDE に使用しています。digia docs hereによると、Qt は/MTフラグを使用してビルドするとメモリの問題が発生することが知られています (これにより、静的ランタイム ライブラリに対してアプリが実行されます)。ただし、このアプリではサードパーティのドライバーも使用しており、そのアプリのドキュメントでは、静的ランタイム ライブラリにリンクしない限りビルドされないと具体的に述べています。案の定、/MTフラグを使用して正常にコンパイルされますが、その設定を削除すると、約 40 のリンカ エラーが発生します。(これまでのところ、ドライバーの静的ライブラリからヘッダー ファイルを 1 つだけ含めています)

だから私の質問は次のとおりです。ここで行う正しいことは何ですか? ドライバーに動的ランタイム ライブラリを期待させる方法はありますか? それとも、Qt のメモリ管理の問題と一緒に暮らす必要がありますか? または、Qt を動的なものにリンクし、ドライバ (および必要な Boost の一部) を静的なものにリンクする方法はありますか? (スタジオではなく QtCreator でこれを行っていることに注意してください)

4

1 に答える 1

1

/MTとはどちら/MDもリンカー オプションです。複数のモジュールを構築している場合は、複数のオプションを使用できます。

この場合、/MDQt と独自のコードに使用します。CRT に依存しない API を使用してドライバーを独自の DLL にラップし、その DLL を/MT. COM の使用はオプションかもしれません。これは確かに CRT に依存するわけではありませんが、やり過ぎかもしれません。

于 2013-02-28T12:07:22.103 に答える