2011-07-14 7 views
3

Windows用のC/C++で軽量ポータブルアプリケーションを作成したいと考えています。 exeのサイズを可能な限り小さくしたいので、私は静的にすべてをリンクしたくありません。私はまた、Dependency Walkerを使用して、私のexeファイルのDLL依存関係を追跡します。Windows用ポータブルC/C++アプリケーションのDLL依存関係

質問のDLL依存関係は、アプリケーションが持つことができ、さまざまなバージョンのWindows間で移植性を保つことができますか?このリストを手元に置いて、依存関係ウォーカーの出力をリストで確認し、リンクするライブラリとリンクを動的に選択することができます。私は、リストにはWindows XPより上位のOSが含まれていることが好ましいが、Windows 98を念頭に置くことも興味深い。

答えて

3

Visual Studioなどの基本的なWin32アプリケーションを作成し、Dependency Walkerの依存関係を確認します。それらはあなたの基本依存関係です。 user32.dll,kernel32.dllなど、標準のWin32 DLLファイルがすべて必要になります。 (いくつかはアプリケーションによって何が行われるかによって異なりますが、場合によってはkernel32.dllだけで済むかもしれませんが、画面にウィンドウを表示することはできません。 )

Windows 98上で動作するアプリケーションをコンパイルできる最後のバージョンのVisual StudioはVisual Studio 2005です.Visual Studio 2008はWindows 2000の最小限のものをターゲットにできますが、VS 2010は最小限のWindows XP SP2。古いバージョンのコンパイラを使用するか、実行可能ファイルのPEヘッダを手動で編集して、サブシステムフィールドを変更する必要があります。

あなたは、もともとMSDNマガジンに掲載されたから、あなたはマット・ピエトレックのLIBCTINYを調査する必要があります(それは正直、時間の無駄だが)このようなことには本当にしている場合は、バック2001年1月にこの小さなライブラリはに、それは理論的に可能にしますCRTへのリンクを避けるために/NODEFAULTLIB compiler flagを使用してください。

+0

この基本的なアプリケーションですか?Windows XPまたは98で移植可能ですか? –

+0

@Sina:コンパイルに使用するMicrosoftのC/C++コンパイラ(Visual Studioにバンドルされている)のバージョンによって異なります。私は私の答えでそれをより完全に扱います。古いバージョンのWindowsでは存在しないCRT呼び出し関数のそれ以降のバージョンです。 –

+0

コディに感謝します。 CRTは移植可能なプログラムを作成する上での主な問題であると私は結論づけている。本当ですか?標準のWin32 DLLにも他の種類の問題がありますか?例えば、異なるWindowsバージョンでのそれらの非互換性。 –

1

私はあなたがVCを使用していると仮定しています。 Microsoftは、MSDNで探しているリストを提供しています。参照:

注意。また、Windowsの現代版では、というVCRedist _ * .exeを使用してランタイムDLLを正しくインストールするように指示されています。プログラムの可搬性が低下する可能性がありますが、システムの一種のインストールです誰も一度もアンインストールする必要のないコンポーネントを提供します。

2

標準のWindows DLLにリンクしている場合は、ターゲットシステムにDLLが既に存在するため、問題はありません。

他のDLLについては、静的リンクを使用した場合よりもDLLを配布する必要がある場合は、実行可能なコードサイズが大きくなります。共通ライブラリを使用する複数のアプリケーションを使用している場合は、実行可能なコードサイズが小さくなるだけです。

つまり、ダイナミックリンクは魅力的ですが、古くからの静的リンクが優れています。

ここで、Cランタイムにリンクすることに懸念がある場合、すべてのシステムに存在するWindows Cランタイムとリンクできるmingwの使用を検討できます。

+0

ここでは、mingwとMicrosoftのコンパイラとの違いは何ですか? –

+1

@Cody mingwは、Windowsインストール(つまり、system32のもの)からmsvcrt.dllをCランタイムとして使用できます。 Visual Studioでは、独自のランタイムを使用する必要があります。 MSVC6は、私が思い出した場合、Windows Cランタイムを使用できる最後のバージョンです。 –

+0

ポイントのためにDavidに感謝します。私は、Cランタイムは移植可能なプログラムを作成するための頭痛だと思う。 Dependency Walkerでutorrent.exeをチェックしたところ、実際にはmsvcrt.dllも使用していました。 –

関連する問題