3

(元の質問はそこで尋ねられました:http ://www.ogre3d.org/phpBB2/viewtopic.php?t = 44832 )

「vs2008(VC9)ですべてをビルドしたいのですが、PhysX SDKはvs2005(VC8)でビルドされています。これにより、すべてのvc9コンパイル済みライブラリを使用してこのvc8ライブラリと組み合わせて使用​​すると、問題が発生しますか?」

VC8で生成された.libファイル(および.dll)を使用してvc9コンパイル済みexeに含める前日に、コンパイラーが.libファイルを開くことができなかったと答えました。

さて、他の人は問題なくこれをしたと答えました。

vc9とvc8の間のlibの互換性に関する情報が見つかりません。

だから...助けて?

4

2 に答える 2

3

動作しますが、CRT/STL オブジェクトを共有すると問題が発生します。

したがって、vc8 ライブラリで 'new' を実行し、これを vc9 関数に返し、これがこのオブジェクトを削除すると、delete からアサートが得られます。

 T* funcInVc8Lib()
 {
     return new T();
 }

 void funcInVC9Program()
 {
     T* p = funcInVc8Lib();
     // ...
     delete p; // it should at least assert here (in _CrtIsValidHeapPtr() )
 }
于 2008-10-05T13:36:49.660 に答える
3

lib 形式は COFF ( http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.71).aspx ) で、PE 形式でも COFF が使用されます。したがって、vc8 でビルドされたすべてのライブラリではないにしても、ほとんどのライブラリが vc9 とリンク可能であることが期待されます。

しかし、msdn で、VC8 でコンパイルされたライブラリが VC9 とうまくリンクすることを MS が保証していないように見えるスレッドを見つけました。http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8042a534-aa8b-4f99-81ee-e5ff39ae6e69/ )

この 2 ビットの情報を考慮して、次のように結論付けます。MS は完全な 100% の互換性を保証していませんが、ほとんどの場合、vc8 lib を vc9 にリンクすると機能すると予想されます。

お役に立てれば。PS「コンパイラは.libファイルを開くことができませんでした。」と書いています。リンカは、コンパイラではなく、リンクするライブラリを開こうとするものです。

于 2008-10-05T13:43:09.210 に答える