C標準ライブラリが静的ライブラリか動的ライブラリか

C標準ライブラリ関数(ex.prinf、scanf)は静的ライブラリ関数または動的ライブラリ関数として扱われますか?

4
これは完全にインプリメンテーション依存であり、何でも構いません。コンパイラスイッチによっては同じインプリメンテーションの下でも両方が可能です。実際には、答えが不可能、本当に。私の実装は、デフォルトでMSVCRTと動的にリンクしますが、それは何も意味しません。
追加された 著者 Damon,
関数が静的か動的かはどういう意味ですか?
追加された 著者 David Heffernan,
@MitchWheatそれがそうであるならば、質問は「あなたが私のプログラムをどのようにリンクしたか教えてくれますか? ;-)
追加された 著者 David Heffernan,
私は彼らが「リンケージ」を意味すると推測します
追加された 著者 Mitch Wheat,
@デイビッド:確かに.... :)
追加された 著者 Mitch Wheat,

2 答え

プログラムのリンク方法によって異なります。あなたは両方の方法で行くことができます。 VSでは、/MT (静的)または/MD (動的)のいずれかを指定できます。 gccでは、プログラムを静的ライブラリにリンクするために -static-libgcc フラグを指定することができます。

http://gcc.gnu.org/onlinedocs/gcc/Link-Optionsを参照してください。 .html gccフラグと http://msdn.microsoft.com/en-us/library/abx4dbyh(v = vs80).aspx を参照してください。

5
追加された
-static-libgcc は標準のCライブラリではない libgcc のみです。通常の libc.so ではなく libc.a をリンクすることができます。
追加された 著者 wRAR,
ご回答有難うございます
追加された 著者 user966379,
/ MTと/ MDはリンカーオプションではなくコンパイルオプションです。
追加された 著者 Hans Passant,

あなたは本当に気にしてはいけません。

また、コンパイラは、標準が定義していることに従って、標準関数を特別に扱うことさえできます。

時にはGCCがそういうことをします。例えば、memsetへの呼び出しをループに最適化するかもしれません...

あなたの質問があなたのプログラム foo をどのようにリンクしていたのか、GNU/Linuxでは ldd foo というコマンドで答えます。

乾杯。

1
追加された