2

古いバージョンの MSVC で構築されたサード パーティの静的ライブラリがあり、MSVC10 (VisualStudio2010) のアプリケーションに正常にリンクしています。MSVC11 にアップグレードしましたが、リンクできません。

2>LINK : 致命的なエラー C1047: オブジェクトまたはライブラリ ファイル 'MyLib.lib' は、他のオブジェクトよりも古いコンパイラで作成されました。古いオブジェクトとライブラリを再構築する

これは、lib が /GL オプションを使用してコンパイルされたため、オブジェクト ファイルに実際には COFF が含まれておらず、いくつかの中間形式が含まれているために発生したと思います。再コンパイルするライブラリのソースコードがありません。動的にリンクするために dll を作成したくありません。

これらのobjをCOFFに「再コンパイル」し、最終的にMSVC11アプリケーションにリンクする方法はありますか?

4

1 に答える 1

1

たとえこれが可能だったとしても、これはしたくありません。異なるバージョンの CRT に対してビルドされたオブジェクト ファイルをリンクすると、通常は失敗に終わります。より具体的には、このような 2 つのオブジェクト ファイルが両方とも C++ 標準ライブラリを使用している場合、One Definition Rule (ODR) に違反することはほぼ確実です。

Visual C++ 2012 を使用してモジュールを再構築できない場合は、Visual C++ 2010 で構築された動的ライブラリ内にモジュールをカプセル化し、その DLL のインターフェイスで C++ 標準ライブラリ型を使用しないようにする必要があります。

于 2012-12-11T18:52:10.763 に答える