2012-01-18 8 views
1

このプロジェクトでは、VS2008でVC++ 9を使用しており、VS2010でVC++ 10に切り替えて新しい機能を使用したいと考えています。残念ながら、私たちの依存関係のいくつかはVC++ 9でビルドされており、さまざまな理由で現時点ではVC++ 10でそれらを再コンパイルすることはできません。私たちは本当にスイッチを作りたいので、単純にそれらのライブラリにリンクする方法があるのですか、VC++ 10とVC++ 9のバイナリ間に互換性がありませんか?VC++ 10でコンパイルしたコードをVC++ 9でコンパイルしたコードにリンクする

編集:実際の依存関係はBWAPIBWTAです。 BWAPIの場合、それは問題ではありませんが、BWTAはCGALに依存しており、それが私たちに問題をもたらしています。リンクしようとすると、リンクエラーが発生します。

+0

これは実際に試してみてどういうことが起こっているのかを教えてもらえば、はるかに簡単です。それは不可能ではありませんが、電話をかけるにはあなたから*ロット*詳細が必要です。 –

答えて

1

"純粋な" C関数のみをエクスポートするCOMモジュールまたはDLLがない限り、一般的に運が悪いです。

1

Visual Studioリリースでは、ABI互換性を破ることができます。つまり、C++クラスのエクスポートされた内部シグネチャとは異なり、あるバージョンでコンパイルされたバイナリから別のバージョンでコンパイルされたバイナリにたとえばstd::stringを渡すと、期待どおりの結果が得られない可能性があります。つまり、この作業に頼らないでください。そうであれば、あなたは幸いですが、ランタイム・レベルの「未定義の動作」領域にあります。 VS2010でビルドするコードを修正してください。おそらく、まずは壊れているでしょう。

+0

私たちのコードではありません。実際、私たちのコードはうまくいきます。問題は、使用しているいくつかの外部ライブラリです。 –

0

あなたが変更できないサードパーティ製のlibの場合でも、一般的な答えは、VC2008で構築された簡単なDLLでラップして、サードパーティを呼び出します。次に、公開されているものを制御できるので、両方のリンカーで動作する「標準化された」メカニズムに戻すことができます。 Cが非常に標準化されているので、これはほとんど常にC関数呼び出しです。

MSはコンパイル済みC++のABIを変更していますが、標準委員会がC++バイナリを呼び出す標準的な方法を提供していないと思います。

GCALを見るとこれは良い答えではないようですが、そのような場合にはGCALに連絡して再構築されたバイナリを待つことがベストです。


しかし、私はちょうど確認 - そのオープンソース、それを自分で再構築します。それだけでなく、すでにVS2010をサポートしているので、再構築は簡単に行えるはずです。

関連する問題