在 gcc 中使用長雙精度函數

在 gcc 中使用長雙精度函數

我很難讓 Ubuntu 的 gcc 理解long doublemath.h 中的 - 操作函數,即sqrtl,cabslcexpl。編譯時我收到的訊息是

undefined reference to `sqrtl'

-lm除了我必須在命令列上放置 gcc 才能理解這些函數之外,還有其他標誌嗎?是不是缺少包裹?還是這是我使用的版本(Oneiric 上的 4.6.1)的問題?

答案1

問題在於參數傳遞給編譯器的順序。

在 Oneiric 上,必須呼叫連結庫來源檔案的名稱:

gcc test.c -lm

更詳細地描述了此更改及其原因這裡

對於常數值的函數不會出現這個問題,因為 gcc 有它們的內建版本。因此,使用 進行編譯-fno-builtin會產生與參數中的變數相同的錯誤。

感謝賈森康蒂對於此資訊。

相關內容