2012-11-05 111 views
1

使用-lm進行math.lib的鏈接工作在gcc 4.6.3中是不同的方式。gcc中的libm鏈接問題4.6.3

用它來工作gcc的-lm file.cGCC 4.6.3GCC file.c -lm

這種改變的原因是什麼?或者它是一個錯誤?

謝謝

這是代碼的一部分。

float i = 100; 
    printf("%f", sqrt(i)); 
    return 0; 

我遵守這樣

gcc的-lm mat.c

/tmp/ccPxTEjS.o:在函數'主。

mat.c :(文字+ 0x2c上):未定義參考`SQRT」

collect2:LD返回1個退出狀態

操作系統:Ubuntu的12.04

+0

這真的讓我感到驚訝。你確定?如果你在4.6.3上運行'gcc -lm file.c',實際上會發生什麼?你沒有具體說明問題所在。 –

+0

@nhahtdh對不起現在改變了。 –

+0

是的。它是。我驗證了。 –

回答

3

你說你試圖編譯爲:

gcc -lm mat.c 

GCC的一些配置需要的選項嚴格的排序,這需要庫來使用它們的源代碼之後:

gcc mat.c -lm 

這是行不通的?

+0

是的,它的工作。但爲什麼突然改變這種情況呢? –

+5

**在Linux **上,大多數'gcc'的配置都需要庫來源代碼。這在Linux和其他Unix上總是如此。幾十年來它一直沒有變化。 –

+0

這與GCC有關,與Binutils更有關係。在OS X上,GCC很常見,但Binutils不是,您可以按任意順序指定庫。 –