[解決済み】なぜC言語で数学ライブラリをリンクする必要があるのですか?
2022-03-30 11:16:26
質問
もし
<stdlib.h>
または
<stdio.h>
C言語のプログラムでは、コンパイル時にこれらをリンクする必要はありませんが
<math.h>
を使用すると
-lm
をgccで使用する場合などです。
gcc test.c -o test -lm
この理由は何でしょうか?なぜ、数学ライブラリーは明示的にリンクしなければならないのに、他のライブラリーはリンクしないのでしょうか?
どのように解決するのですか?
の関数は
stdlib.h
と
stdio.h
には実装があります。
libc.so
(または
libc.a
のように)、デフォルトで実行ファイルにリンクされます。
-lc
が指定された場合)。 GCCは、この自動リンクを避けるように
-nostdlib
または
-nodefaultlibs
オプションを使用します。
の数学関数は
math.h
には実装があります。
libm.so
(または
libm.a
は静的リンクの場合)、そして
libm
はデフォルトではリンクされていません。 これには歴史的な理由があります
libm
/
libc
を分割し、どれもあまり納得のいくものではありませんでした。
興味深いことに、C++ ランタイムの
libstdc++
が必要です。
libm
ということで、C++のプログラムをGCCでコンパイルした場合(
g++
を使用すると、自動的に
libm
でリンクされています。
関連
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?
-
[解決済み】共有オブジェクト(.so)、静的ライブラリ(.a)、DLL(.so)の違い?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】LEALアセンブリ命令は何をするのですか?
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言