2010-11-28 7 views
3

wxWidgetsをUIフレームワークとして使用し、Windows 7マシンでVisual Studio 2010を使用してコンパイルしたアプリケーションがあります。私はwxWidgetsを静的にリンクしています。私のアプリケーションは処理のためにC dllも使用します。C++で開発されたアプリケーションをデプロイする

今、別の新しくインストールしたマシン(Win7)でこのアプリケーションを実行しようとしています。これには開発者環境の設定はありません。私はアプリケーションの実行可能ファイルをコピーし、dllやその他のサポートするテキストファイルをこのマシンにコピーしました。

アプリケーションが起動すると、次のメッセージが表示されます。

The program failed to start because MSVCR100d.DLL is missing from your computer. Try reinstalling the program to fix this problem

私のCライブラリがデバッグバージョンを使用していて、Releaseモードで問題を解決したことをコンパイルしていると考えました。しかしそれはまだMSVCR100.dllを求めます。回避策への道は、VC++再頒布可能パッケージをインストールすることだと思います。しかし、それが最良のアプローチであるかどうかはわかりません。

ここに私の質問があります。

  1. 通常、アプリケーションをどのように展開しますか? VC++再頒布可能パッケージも提供していますか?
  2. 私はこれを64ビットマシンでコンパイルし、32ビットでテストしています。これでいい?それとも32ビットで別にコンパイルする必要がありますか?
  3. ランタイムライブラリと静的にリンクできますか?だから、私はDLLと他のファイルを発送することができます。
  4. 多くのマシンで実行される実行可能ファイルをビルドする際に注意しなければならない他の一般的なことは何ですか?

以下は、関連する可能性のある設定の一部です。

General : 
    Use of MFC : Use standard windows libraries 
    Use of ATL : Not using 

C/C++ : 
    Runtime library : Multi-threaded(/MT) 

助けてください。

答えて

2

デバッグ専用DLLを持っていないマシンでDLLを使用しようとしています。

問題はmsvcr100d.dllが末尾のdで示されるデバッグ専用のDLLであるという事実から発生します。

したがって、実際に/ MDdを使用している/ MTは使用していません。/MTを使用した場合、そのDLLをロードしようとします...

だからあなたの質問への答えに:

  1. 私は静的に実行時にリンクすることを好みます。
  2. 本当に問題はありません。 32ビットOS上で64ビットのコンパイルされたバイナリを試して実行しないでください。
  3. はい。
  4. 最小限の仕様に注意してください。あなたがペンティアム3をサポートする必要がある場合、すなわちはい、VC++再頒布可能パッケージを提供することが必要である
+0

ありがとうございます。私はまた、MinGWでMSコンパイラを完全に避け、GCCを使用することについても読んでいます。それについて意見はありますか? –

+0

@Appu:MSVCコンパイラはかなり甘いです。変更する必要はほとんどありません。 – Puppy

+0

@Appu:私はDeadMGに同意します。その価値があることに気付くなら、GCCを習得すれば、Visual Studioはあなたの人生を何度も簡単にすることができます。私は喜んでどちらかを扱うが、私はむしろちょうど開発者のスタジオを処理するだろう:) – Goz

0

これは私が「x64で動作するx86 exeはx64」の検索結果と同じ質問です。それはすべてに答えるわけではありませんが、いくつかの答えがあります。 2番目の1を超えて見れば

http://social.msdn.microsoft.com/Forums/en/netfx64bit/thread/5ad0ff2c-558c-43ba-a59d-9cd0a0785103

あなたは、おそらくより多くの同様の情報を見つけることができます、そしてあなたは、いくつか他のもののために照会します。

VC++ランタイムのものについては、自分自身でペストのようなMSのC++バージョンは避けていますが、経験はありませんが、現代のすべてのWindowsコンピュータでは、 VC++、.NETなど)が既に含まれています。

+0

Cおよび/またはC++ for WindowsでプログラミングするときにMSのランタイムバージョンを避けるにはどうすればよいですか? – rubenvb

+0

私はWindows用のみを開発していません。また、ウィンドウのために何かを開発しただけで、VC++ランタイムが必要というわけではありません。 x86命令は、どのOSがそれらを実行しているかには関係ありません。 VC++ランタイムはWindowsシステムライブラリと同義ですか?私はwindows.hをインクルードしてSleep()を使うので、VC++ランタイムが必要ですか? WinAPIを使ってGUIウィンドウを設定すると、VC++が必要ですか?私はそうは思わないだろうが、MSはOS /シェル操作にいくつかのものを組み込んでいるので、おそらくVC++ランタイムはWindowsシステムコールと同義であるかもしれない。 – Loduwijk

+0

コメントは短すぎます。通常、私はこれをやりたいとは思わないが、最初に文字がなくなってから2番目に滲むことが有益だと感じている。 VC++を使用してアプリケーションを作成する場合、おそらく何があってもランタイムが必要になることは明らかです。私はまた、VC++をWindows用のC++で開発しても使用しません。私はMinGWを使用します。しかし、やはり、この質問は重要で、おそらくVC++ランタイムにはアプリケーションが必要とするものが何であるのでしょうか?任意のWindows固有のもの(WinAPI f.ex. Sleep()、CreateWindow()など)に必要ですか、それともサポートしていますか? – Loduwijk

-1
  1. など... SSE4を使用しないでください。最善の方法は、Visual Studio SetaulとDeploymentプロジェクトを使用してセットアップパッケージを作成することです。

  2. 実行可能な32ビットをコンパイルしても問題ありません。

  3. このような巨大な実行可能ファイルはプロフェッショナルではありません。

+0

TBH彼らはそれほど巨大に終わらない。リンクストリッパーは、多くの茶番を取り除きます。人々にvcredistインストーラパッケージを送信する必要があるよりも、ずっと小さな再配布になります。 – Goz

+1

「巨大な」実行可能ファイルがプロフェッショナルではないと最後に思ったときは思い出せません。何分、私は実行ファイルのファイルサイズを確認した最後の時間を思い出すことができません... –

関連する問題