バージョンの異なる VisualC++ で作った lib ファイルのリンクについて
Posted: 2011年8月14日(日) 02:03
お世話になっています。
今回は VisualC++ を使ったスタティックリンクライブラリの作成で
少し詰まってしまったので質問させていただきました。
※ちょっと前置きが長くなります・・・(汗
現在私はゲーム開発用のライブラリを作成しています。
それの公開にあたって、付属のサンプルを異なるバージョンのコンパイラ
(今のところ vc2008 と vc2010)で実行できるようにプロジェクトを準備しました。
しかし、2008 でビルドした lib ファイルを 2010、またその逆で使うと、以下のような
警告とエラーが大量に出るようになりました。
2008 で作って 2010 で使った時...等
2010 で作って 2008 で使った時...等
これについて調べてみたところ、バージョンの異なるコンパイラ間で使おうとした場合に
このエラーが出るという記事が見つかりました。
http://watery.dip.jp/~slash/0363
この問題はとりあえずこれで解決できるかなと思ったのですが、ふと DXライブラリの事を思い出しました。
DXライブラリでは、配布されている lib ファイルだけで異なるバージョンのコンパイラでも動作します。
さらに、デバッグ情報云々の警告もひとつも出ません。
疑問に思って DXライブラリのプロジェクトを覗いてみたのですが、
これといって特別な設定をしているようではありませんでした。
ただ、プロジェクトの変換をしたときのレポートに「C++ コンパイラの準拠の変更~」等の
気になる警告をいくつか見つけました。
(▼ここからが今回お聞きしたいことです)
このことから、
「DXライブラリが警告のひとつもなくバージョンの異なる環境でもリンクできるのは、
DXライブラリをビルドしている環境はVisualC++の仕様が変更される前のものだから」
と考えたのですが、これは正しいのでしょうか?
もし違うようでしたら、2008 と 2010 の環境で「デバッグ情報が見つかりません」等の警告を出すことなく
正常にリンクさせるヒント等をいただけると助かります。
今回は VisualC++ を使ったスタティックリンクライブラリの作成で
少し詰まってしまったので質問させていただきました。
※ちょっと前置きが長くなります・・・(汗
現在私はゲーム開発用のライブラリを作成しています。
それの公開にあたって、付属のサンプルを異なるバージョンのコンパイラ
(今のところ vc2008 と vc2010)で実行できるようにプロジェクトを準備しました。
しかし、2008 でビルドした lib ファイルを 2010、またその逆で使うと、以下のような
警告とエラーが大量に出るようになりました。
2008 で作って 2010 で使った時
error LNK2001: 外部シンボル ""public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)" は未解決です。
2010 で作って 2008 で使った時
warning LNK4229: 無効なディレクティブ '/FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=2' が見つかりました。無視します。
error LNK2001: 外部シンボル ""void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z)" は未解決です。
これについて調べてみたところ、バージョンの異なるコンパイラ間で使おうとした場合に
このエラーが出るという記事が見つかりました。
http://watery.dip.jp/~slash/0363
この問題はとりあえずこれで解決できるかなと思ったのですが、ふと DXライブラリの事を思い出しました。
DXライブラリでは、配布されている lib ファイルだけで異なるバージョンのコンパイラでも動作します。
さらに、デバッグ情報云々の警告もひとつも出ません。
疑問に思って DXライブラリのプロジェクトを覗いてみたのですが、
これといって特別な設定をしているようではありませんでした。
ただ、プロジェクトの変換をしたときのレポートに「C++ コンパイラの準拠の変更~」等の
気になる警告をいくつか見つけました。
(▼ここからが今回お聞きしたいことです)
このことから、
「DXライブラリが警告のひとつもなくバージョンの異なる環境でもリンクできるのは、
DXライブラリをビルドしている環境はVisualC++の仕様が変更される前のものだから」
と考えたのですが、これは正しいのでしょうか?
もし違うようでしたら、2008 と 2010 の環境で「デバッグ情報が見つかりません」等の警告を出すことなく
正常にリンクさせるヒント等をいただけると助かります。