首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux C 編譯報錯:log 函數未定義?缺少 math.h 與 -lm 鏈接

     編輯:程式設計綜合問答

問題現象

《Beginning Linux Programming》第 4 章 limits.c 示例中調用 log(x * x + 3.21),編譯報 undefined reference to 'log'。

根因

log() 屬於數學庫 libm,**不在默認 C 標準庫 (libc) 中**,需顯式鏈接。

解決方法

  1. 包含頭文件:#include <math.h>
  2. 編譯時鏈接數學庫:gcc limits.c -o limits -lm

注意: -lm 必須放在源文件**後面**(GCC 鏈接器按順序解析符號)。

常見數學函數同理

  • sin, cos, tan, sqrt, pow, exp, log, log10, floor, ceil 等均需 -lm。

驗證

$ gcc -c limits.c        # 編譯通過(只檢查語法)
$ gcc limits.o -o limits # 鏈接報錯 undefined reference to log
$ gcc limits.c -o limits -lm # 正確:編譯+鏈接一步到位

總結

C 標準庫分 libc (默認) 和 libm (數學)。用到 math.h 函數,**編譯加 -lm** 是鐵律。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved