3

Visual Studio 2012 (およびそれ以前のバージョン) は、C コードをコンパイルできます。C++ ではなくプレーン Cです。実行時の混乱を避けたい場合は、これは良い機能です。単純な C バイナリをコンパイルすることを考え、ランタイムなしでコンパイルしたいと考えていました。MSVCRT

(C としてコンパイル) オプションを追加した後、/TCkernel32 や ntdll などの基本的な依存関係のみを含むバイナリを取得したいと考えていました。しかし、代わりに、これはリンクされていました:

ここに画像の説明を入力

ランタイムではなく、 VS 2012 を使用したいと考えています。GCC コンパイラはそれを必要としないため、VS で「単純な」バイナリをコンパイルする方法も必要です。複雑な文字列関数や日付/時刻ライブラリは必ずしも必要ではなく、単純なコードだけが必要です。

質問: MSVCRT ランタイム (または C++ コード) なしで Visual Studio 2012 で C コードをコンパイルすることは可能ですか?

編集:静的リンクなし/MT( )

4

1 に答える 1

6

「MSVCRT ランタイム (または C++ コード) なしで Visual Studio 20xx で C コードをコンパイルすることは可能ですか?」という質問に対する正しい答えです。/MT オプションを使用する必要があります ( Configuration Properties > C/C++ > Code Generation > Runtime Library=Multi-threaded (/MT))。これにより、希望どおりに MSVCRTxx に依存しない実行可能ファイルが作成されます。私の知る限り、それだけです。やりたいことに何の制限もありません。memcpy のようなすべての標準 C ライブラリ関数は引き続き機能します。その他の唯一の違いは、.EXE ファイルがわずかに大きいことです。私は、MSVC6、MSVC2005、MSVC2008、および MSVC2013 を使用して、純粋な ANSI C コードからこのように作成された EXE ファイルを何年も問題なく作成および配布してきました。

「静的リンクなし (/MT)」という修飾子の質問への回答は、まあ、できません。

于 2016-05-31T22:55:38.613 に答える