2016-06-21 1 views
1

これは、this question (MSVCP140.dll missing)に多少追加されています。外部ランタイムDLLを必要とせずにVS内のプログラムをコンパイル

私はWindowsマシン用のプログラムをコンパイルしようとしています。ここで注目すべき大きなものは、ソフトウェアをインストールする権限がないことですが、実行可能ファイルを実行する可能性があります。

問題のWindowsマシンで実行するたびに、MSVCP140.dllの問題が見つかりません。私はthe solution of the question I have linked(これは静的なリンクです)に従いましたが、何か非常に奇妙な理由で私はまだ同じエラーが発生していたときに同僚のコンピュータで動作するようにプログラムを有効にしていてもエラーを受けています。

これ以上のことができれば、プログラムを(完全な移植性がないため)完全に移植可能にすることはできますか?ライブラリで実行可能ファイルを完全にコンパイルするために、VSで変更する必要があるその他の設定はありますか?

私はさらに、コンパイルのために/ MTオプションを使用して静的リンクを使用する解決策を見ており、まだ.dllの問題が見つからないということを強調します。

私の実行ファイルの横にMSVCP140.dllをコピーしようとしましたが、問題は解決しましたが、もう1つの.dllがありません。プログラムが動作するまで.dllを増分的に追加できません。それが唯一の解決策であれば、すべての.dllをプログラムにバンドルすることができてうれしく思いますが、私はsystem32フォルダ全体を絶望からコピーする必要がないので、どのプログラムが必要かを知りたいと思います。

+0

まず、あなたのアプリケーションを知っている必要があります。その依存関係を知っている必要があります。LoadLibrary()でロードされていない依存関係が見つからない、または気付かないことがあります。つまり、DependencyWalkerという小さなツールを使って依存関係を調べることができます。また、すべてのC++ RT DLLを静的にリンクしている場合は、すべての単一マシンで実際に動作するはずですので、そこに不足しているものがあるはずです... –

+0

@AdrianoRepetti私を信じて、なぜ静的リンクが働いていない。 – ZoSal

+0

MSVCP140に依存する他の(デプロイされた)DLLに依存していますか? –

答えて

2

dependency walkerを使用して、必要なDLLと必要な理由を把握してください。これは啓発的なものであり、代替案を使用して多くの依存関係を切り詰める道筋につながります。コンシューマランタイムで特定の関数をインポートしていないと確信できる場合(デバッグ目的でのみインポートするなど)、delay loadを選択できます。

関連する問題