20

Windowsでc++を実行するには、Windows専用にコンパイルする必要があり、Linux以降でも同じことが言えます...

しかし、たとえば、ネイティブC ++で記述されたWindows用のプログラムをコンパイルしている場合、新しくインストールしたWindows PCで実行できますか?つまり、ビジュアルc ++ランタイムライブラリなどをダウンロードしなくても、コンパイルするだけで、たとえば、Windowsをコンピューターに再インストールして、他に何もインストールせずに実行できますか?

(例としてWindowsを使用した上記の質問ですが、新しくインストールしたLinuxディストリビューションでも同じことができますか?例:Ubuntu)よろしくお願いします。

4

4 に答える 4

20

唯一の答えは「状況次第」です。

OSがプログラムを「実行」する方法はたくさんあり、プログラムをビルドする方法もたくさんあり、コードを組み立てる方法もたくさんあります。

「標準ライブラリ」のみを使用し、すべてのライブラリを静的にリンクするプログラムは、他の依存関係を必要としません(必要なすべてのコードがバイナリ自体またはシステム自体の一部であるOSライブラリにあるという意味で)すでにシステム上にあります)。

だが:

  • 標準ライブラリ(すべてのプログラムに存在する可能性が最も高い)を静的にリンクすると、同じコードの多くのコピーのメモリ使用量が増大します。これが、ライブラリが動的にリンクされることが多い理由ですが、これには、これらのライブラリの「インストール」も必要です。

  • 標準ライブラリのみを使用するプログラムは、すべてのシステムに何らかの形で「共通」(または一般的に表現できる)なことしか実行できないため、OSを他のOSとは異なるものにするすべての特性が失われます。

  • 周辺機器の性質上、相互に表現されていない「プラットフォーム」があります。コーヒーマシンには12個のキーがあり、2行x20列のテキスト表示があります。PCには、マウス、キーボード、および幅が10,000ピクセル、それぞれ数百万色に達することができるディスプレイがあります。タブレットには、同時に複数のポイントをつかむことができるタッチ面があります。これら3つのプラットフォームすべてで同じように実行されるプログラムを想像できますか?

于 2013-02-04T20:35:46.360 に答える
1

いいえ。多くの場合、ライブラリはシステムによって異なります。プログラムにGUIが含まれている場合は、他のOSでは実行されないOS固有のコードを確実に使用できます。

GUIコードなしでg++コンパイラを対象とするC++プログラムを作成する場合でも、OS固有のコードが存在する可能性があります。ただし、最小限の労力で移植できるはずです。

プログラムがstlとstdioのみを使用している場合は、おそらく移植可能です。たとえば、MSSTLの::c_str()関数は、Linuxの関数とは少し異なります。

于 2013-02-04T20:13:28.090 に答える
0

価値のあることとして、libcおよびlibc ++への静的リンクでMinGWを使用する場合、Windows APIで利用できない機能を特に有効にしない限り、C++アプリケーションはWindowsシステム'95以降で動作する可能性が非常に高くなります。 NTの機能。Windows 7用にコンパイルされたすべてのSDLアプリケーション(もちろん32ビットでコンパイルされたもの)は、'95マシンで正常に動作します。

Linuxアプリケーションをデプロイするときは、ソースに加えて構成スクリプトまたはmakefileを提供するのが最善です。これにより、ユーザーがアプリケーションに対して有効な依存関係を持つことが保証されます。ただし、必要に応じて、バイナリを特定のパッケージマネージャーにデプロイできます。

于 2013-02-04T20:37:47.727 に答える
-1

はい、標準ライブラリはどこにでもあります。考えてみてください。入手するプログラムのほとんどはC/C++で記述されています。winsockなどの特定のライブラリを使用する場合にのみ依存関係が発生するため、一部のWindowsアプリケーションはLinuxで動作する可能性が低く、その逆も同様です。

于 2013-02-04T20:12:56.403 に答える