編譯帶其它庫文件的C程序

 

問題:今天照前一篇文章作一個小的練習的時候,發現一個錯誤,好像是找不到sin這個函數,你們能夠指點一下麼?

源碼:
#include 
#include 

int main(void)
{
    double pi = 3.1416;
    printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2), log(1.0));
    return 0;
}

編譯:
$ gcc -Wall math1.c -o math1.exe
/tmp/ccsqlDzL.o: In function `main':
math1.c:(.text+0x30): undefined reference to `sin'
collect2: ld returned 1 exit status

注:編譯環境 Ubuntu gcc 4.3.3

答案:

使用math.h中聲明的庫函數還有一點特殊之處,gcc命令行必須加-lm選項,由於數學函數位於libm.so庫文件中(這些庫文件一般位於/lib目錄下),-lm選項告訴編譯器,咱們程序中用到的數學函數要到這個庫文件裏找。本書用到的大部分庫函數(例如printf)位於libc.so庫文件中,使用libc.so中的庫函數在編譯時不須要加-lc選項,固然加了也不算錯,由於這個選項是gcc的默認選項。sql

使用如下命令編譯經過:函數

$ gcc -Wall math1.c -o math1.exe -lmspa

相關文章
相關標籤/搜索