2011-10-08 13 views
0

スタティックライブラリに問題があります。名前の衝突なしに、同じSDKの2つの異なるバージョンを1つのDLLで使用する必要があります。私は解決策はSDKのすべてのバージョンの2静的なlibsを作成し、これらのlibsをDLLにインポートすることだと思った。しかし、この解決策は奇妙な作品と私はなぜ....スタティックライブラリ

簡素化の状況は次のようになりますわからない:

LIB1 - あり - SDK 1.0からのものを使用する関数Add1を

LIB2がありますSDK 2.0から物事

DLL-輸入LIB1とLIB2を使用し、機能がAdd1をやADD2を呼び出します(floatバージョン)を追加している機能ADD2 - パラメータでバージョン番号に依存

コンパイルプロセスはOKですが、DLL作品1つのバージョンSDKのみで:(

私がそれをデバッグすると、そのプログラムがバージョン2.0のパラメータからAdd関数を呼び出すのがわかります。 Add Add2を実際に呼び出す - これはまだ正しいです。しかし、Add2関数の中では、SDK 2.0の代わりにSDK 1.0で定義されているものを使用します。 LIB2はSDK 2.0で実際に作成されます。 (dirsとlibディレクトリはSDK 2.0に設定されています)

なぜSDK 1.0を使用しますか? :(

は、(異なる名前空間が存在しない)???私はSDK 2.0からSDK 1.0オーバーライド・シンボルからDLLや記号を作成するときにため、リンカのすべてを一緒に参加していることです。

あなたが任意のアイデアを持っていますか私は、Visual C++ 2010を使用し、問題があるとどんな解決策がある???

どうもありがとうございました!

...あなたが観察

答えて

2

行動は、おそらくライブラリがリストされた順序によって引き起こされる場合リンカーオプションで。逆の順序でそれらを狙っており、あなたは「反対の」行動をよく観察するかもしれません。

このような同じ記号を持つライブラリを混在させることはできません。あなたの最良の賭けは、異なるシンボルをあなたの "クライアント" DLL(すなわち異なる名前空間または異なる名前)に公開するよりも、別のDLLにライブラリの少なくとも1つ(またはその両方)をラップすることです。

関連する問題