Visual Studio 2002以降のさまざまなバージョンから作成されたCコードの静的ライブラリの混合

StackOverflow https://stackoverflow.com/questions/462768

質問

Visual Studio 2002 C(v7.0)コンパイラとインテルFortran 9.0.018コンパイラを使用してコンパイルおよびリンクされたCおよびFortranルーチンの静的リンク可能ライブラリがあります。

ライブラリのCコードは、Microsoft C-RunTime(MSCRT)2002静的ライブラリ(シングルスレッド)を呼び出してリンクします。 2002 CRTライブラリの実際のバージョン番号はv7.0です

この静的ライブラリを<!> quot; vs2002if9.lib <!> quot;

と呼びます。

<!> quot; vs2002if9.lib <!> quot;に静的にリンクできますか? Cランタイム呼び出しに関する呼び出しプログラムの動作について心配することなく、Visual Studioの新しいバージョン(2003、2005、または2008)を安全に使用しますか?

または、CRT静的ライブラリのバージョンを混在させて問題を作成していますか?

<!> quot; vs2002if9.lib <!> quot;を指定した場合サードパーティのソフトウェア開発者に?どのような要件を課していますか?

役に立ちましたか?

解決

Cランタイムのミキシングは、過去にはうまくいきませんでした。この動作を確認できる唯一の方法は{多分}静的にリンクされたC-Runtimeの境界内でスタック/ヒープの使用を完全に分離している場合です.lib提供]。

例として、アプリケーション内でポインター[ヒープメモリ]を割り当て、このポインターを指定したライブラリに渡す場合、どのヒープマネージャーを使用する必要がありますか?正しい答えは、ポインターを管理するヒープマネージャーですが、ライブラリは他のヒープマネージャーを認識しません。ライブラリがアプリケーションで使用するためにメモリを割り当て、提供されたポインターを使用して解放/削除するのはアプリケーションの責任である場合、見苦しくなります(悪いデザインはい、まだ可能です)。繰り返しますが、間違ったヒープマネージャーが利用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top