4

VS 2005でコンパイルされた静的ライブラリ(.lib)をVS 2008でコンパイルされたプログラムとリンクするのは正しいですか?ライブラリと私のプログラムはどちらもC++で書かれています。このプログラムは、Windows Mobile 6 Professionalエミュレータで実行されます。VS 2005&2008 library link

これは動作するようですが、リンクエラーはありません。しかし、リンクされたライブラリ内で奇妙なことが起こるため、起動時にプログラムがクラッシュします。例えば。 libは大きな負数のサイズを持つ文字のベクトルを返すことができます。

プログラムは、さらに奇妙なビルドのリリース構成を使用する場合にのみ問題があるとは何VS 2005

してコンパイルされたときにはそのような問題はありません。デバッグ構成を使用してコンパイルする場合、問題は発生しません。

答えて

11

VS2005とVS2008は異なるSTL実装を使用します。 VS2005コードがベクトルを返すとき、オブジェクトのメモリレイアウトはVS2008の予想とは異なります。返された日付に表示されている破損した値の理由になります。

経験則として、プロジェクトのすべてのC++モジュールを同じコンパイラでコンパイルし、すべての設定/#が同じになるようにする必要があります。

同様の動作を引き起こす特定の#defineは、VS2008のSECURE_SCL #defineです。 #defining SECURE_SCLはさまざまなC++ライブラリクラスにさらに多くのメンバ変数を導入するため、異なる設定でコンパイルされた2つのモジュールが問題を正確に作成します。

2

あなたが説明した方法で古いライブラリにリンクするのは間違いありませんが、奇妙な挙動を見ているのは驚きではありません。カップルの健全性チェック:

  • 同じバージョン同じランタイムライブラリを使用して、両方のファイルがありますか?
  • .EXEアプリケーションは、.LIBが構築されたのと同じヘッダーファイルを "見ていますか"。 _WIN32_WINNT(等)マクロがdeclared properlyであることを確認してください。

.LIBと言うときは、真の静的ライブラリ(mylib.lib)またはDLL(mylib.lib-> mylib.dll)のインポートライブラリを意味しますか?

VS2008実行可能プロジェクトのコンパイル/リンクの設定は何ですか?

関連する問題