コンパイルして Win32-x64 バイナリ(64bit) を作成すると実行できない(Win32-x86 環境に VC8 beta2(日本語版) をインストールした場合)


229,353

Yesterday: 3 Today: 6

connected: via IPv4

コンパイルして Win32-x64 バイナリ(64bit) を作成すると実行できない(Win32-x86 環境に VC8 beta2(日本語版) をインストールした場合)

beta2 から製品版になってとるべき手段が変更されました。
VC8(Visual Studio 2005) でコンパイルしたバイナリを VC がインストールされていない環境で実行できない
ここに書かれている方法はすでに古いので使用しないでください。


症状

Win32-x86 上で作成したバイナリを実行すると「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。」 とダイアログが表示されて実行できない。

リモートデバッグ上では「このアプリケーションの構成が正しくないため、アプリケーションの開始に失敗しました。マニフェストファイルを参照して原因を調べてください。アプリケーションを再インストールすることで、この問題が解決する可能性があります。...」 とダイアログが表示されて実行できない。

対処

VC8 beta2 でプロジェクトのオプションに「リンカオプション」=>「マニフェスト ファイル」の以下の項目を変更してリビルドしてください。

マニフェストの作成:はい => いいえ
    

自動作成されるマニフェストがクロスに対応していないのか、「type='win32' processorArchitexture='x86'」などと、たわけたものを作成します。

Win32-x64 と Win32-x86 がごちゃ混ぜになっていて実行できないバイナリになるのが原因です。

Win32-x86 の DLL をロードしようとしていないか確認してください。特に MSVCRT.DLL, msvcp60.dll などが問題になります。

LoadLibrary でファイルを検索するパスすべてに Win32-x86 の DLL が転がっていないか確認してください。

実行ファイルと同じ場所に Win32 の DLL をおいていないか?
    
環境変数「PATH」に Win32 の DLL が入っているパスが含まれていないか?
    
システムディレクトリ、Windows ディレクトリなどなど
    

Win32-x64 から Win32-x86 の DLL が読み込めないのが原因です。

症状

Win32-x64 上で作成したバイナリを実行すると「ms*.dll が見つからないため、このアプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決される場合があります。」 とダイアログが表示されて実行できない。

リモートデバッグ上に「デバッガ:: ハンドルされていない続行不可の STATUS_DLL_NOT_FOUND 例外がプロセスの読み込み中にスローされました」の行が表示される

対処

VC8 のランタイムが Win32-x64 環境に入っていない

Win32-x86 環境のシステムディレクトリ( WinXP であれば x:WINDOWS\WinSxS\amd64_* フォルダに含まれている DLL 郡を実行ファイルと同じ場所においてください。
    
これらの DLL は現在配布禁止だと思われますので配布しないでください。(Go-Live ライセンスが必要?)
    

Visual C++ 2005 Runtime Libraries Beta 2 を x64 環境にインストールしてください。beta 版を Microsoft から入手してください。
Visual C++ 2005 Runtime Libraries Beta 2(Microsoft)

Visual Studio 2005 beta 2 Go-Live ライセンス 2005-05-23 現在


last update at 2010/11/09 19:17:07