2016-05-18 21 views
0

私はQTで書かれた申請書を持っています。以前はVisual Studio 2012とQt 5.3.1を使用していましたが、その後、最近Visual Studio 2015とQT 5.6にアップグレードしました。以前はmsvcp110とmsvcr110をインストールの一部として提供していました(これはベストプラクティスではありませんでしたが、私はそれを手放しました)。VC++再頒布可能な2012年または2013年または2015年?

アップグレード後、私は今VS 2015での変更のためにVC++ 2015をインストールしなければなりませんでした。私は変更に気付きませんし、現在redistパッケージをインストールしています。

私が直面している問題は、VC++ 2012も提供する必要があり、最近Windows 8.1 Proでソフトウェアを実行する必要があることです.VC++ 2013も提供するように求められました(コンパイルにはVS2013を使用しませんでした)。診断は依存性歩行者とGoogleからのものでした。それだけでなく、ソフトウェアを開始するために、VC++の3つのバージョンすべてのx86とx64をインストールする必要がありました(正直ではありません)。

  1. Visual Studio 2015のみを使用するとVC++ 2012および2013が必要なのはなぜですか?
  2. 他の再配布パッケージを削除するにはどうすればよいですか?私が書いたコードは依存していますか?はいの場合は私は見つけることができますか?
  3. 64ビットコンパイラで厳密にコンパイルすると、32ビットと64ビットの両方のバージョンを提供する必要があるのはなぜですか?
  4. 依存性ウォーカーなしで診断する方法はありますか?アプリケーションがまったく起動を拒否すると、いくつかのログが記録されることはありますか?

長い投稿には申し訳ありませんが、ここに記載されている光は私の正気を回復できます。

ありがとうございます。

+0

従属性ウォーカーは**年**で更新されていません。ユニバーサルCRTはまったく理解しておらず、偽陽性と偽陰性を示します。それを使用しないでください。信頼性の高い診断を行うには、[GFlags](https://msdn.microsoft)を使用して[show loader snaps](https://msdn.microsoft.com/en-us/library/windows/hardware/ff556886.aspx)フラグを有効にします。 .com/ja-us/library/windows/hardware/ff549557.aspx)。 – IInspectable

+0

十分に公正ですが、私がVC++ 2013をインストールした後、それは問題を分類しました。 –

+1

*** Visual Studio 2015のみを使用するとVC++ 2012および2013が必要なのはなぜですか?*** Visual Studio 2015(Qtを含む)ですべての依存ライブラリ/ DLLを再構築しましたか? – drescherjm

答えて

2
  1. 古いランタイムにリンクされているDLLを使用しています。開発マシンでDependency Walkerを使用してこれを追跡することができます。そのために、顧客のマシンにツールをインストールする必要はありません。

  2. 移行VCに対してビルドバージョンをお使いのアプリケーションに同梱されているすべてのファイル++ 2015

  3. あなたはその理由を明らかにする可能性の詳細を提供しませんでした。

  4. 言語ランタイムライブラリ以外のDLLの場合は、遅延読み込みを使用して、ライブラリの読み込みに失敗する可能性があります。ただし、msvcr * .dllを効果的に遅延ロードすることはできません。 1つのオプションは、サポートDLLをまったく使用しない(純粋なWin32 APIを使用するか、ランタイムを静的にリンクする)非常に細いEXEを作成することです。これは、エラーハンドラをインストールしてから、のDLLの。メインプログラムのDLLを読み込むには、遅延ロードリンクまたはLoadLibrary() + GetProcAddress()のいずれかを使用してください。いずれかがキャッチエラーを許可します。このメインプログラムDLLは、いつものようにランタイムDLLを自由にインポートできます。

関連する問題