Windows用のC/C ++で開発し、msvcr100.dllに対してリンクしないことは可能ですか?
これがWindowsの標準cライブラリであることは理解していますが、Visual Studioまたは再頒布可能パッケージがインストールされていない場合、コンピューター上のすべてのプログラムをどのように実行できるのでしょうか。
Windows用のC/C ++で開発し、msvcr100.dllに対してリンクしないことは可能ですか?
これがWindowsの標準cライブラリであることは理解していますが、Visual Studioまたは再頒布可能パッケージがインストールされていない場合、コンピューター上のすべてのプログラムをどのように実行できるのでしょうか。
[ソリューションエクスプローラー]ウィンドウ、[プロパティ]、[C / C ++]、[コード生成]、[ランタイムライブラリ]の設定でプロジェクトを右クリックします。/MTdに変更します。リリース構成について繰り返し、/MTを選択します
ここで、静的バージョンのCRTをリンクします。使用する関数は、実行時にmsvcr100.dllから取得するのではなく、EXEに直接リンクされます。そのため、プログラムと一緒にDLLをデプロイする必要がなくなりました。
独自のDLLを作成する場合は、このオプションの使用を避けてください。次に、これらのDLLとEXEがまったく同じCRTを使用して、すべてが同じCRT状態と同じヒープを共有するようにすることが重要になります。そうしないと、コードのあるチャンクから別のチャンクに解放する必要のあるC++オブジェクトまたはポインターを渡す際に厄介な問題が発生するためです。運が良ければAccessViolation、そうでなければメモリリーク。
プロジェクトでCプログラミング言語/ライブラリのみを使用するように制限すると、WindowsXPSP3以降のすべてのWindowsバージョンで完全にベイク処理されたMSVCRT.libに対してのみリンクできます。
つまり、MSVCR100.DLL(またはその他のVisual Studio DLL)に依存するのではなく、MSVCRTの標準のC関数に対してのみリンクできます。ちなみに、この手法はマイクロソフト傘下で開発されたCoAppプロジェクトで使用されているので、あなたのような場合には良い習慣だと思います。
単に、Windows DDKをダウンロードして、$(DDKInstallPath)lib\Crt\$(DDKPlatform)\msvcrt.lib
Windowsでは、何らかの方法でCRTを使用しない重要なプログラムを作成することは可能ではないかと思います。
msvcrXXX.dllにリンクせずにCRTを使用することは可能です-代わりに静的ライブラリにリンクするだけです。しかし、あなたの質問に対処するには:
Visual Studioまたは再頒布可能パッケージをインストールしなかった場合、コンピューター上のすべてのプログラムをどのように実行できますか?
PC上のプログラムがmsvcrtxxx.dllにリンクされている場合、それらはできませんでした。簡単に言うと、特定のプログラムに必要なredistは、おそらくあなたがやって来る前に、すでにPCにインストールされていたのでしょう。または、少なくとも、プログラムに必要なredistの部分。