gcc鏈結外部函式庫,比如數學函式庫

2022-02-06 07:42:35 字數 1425 閱讀 4575

庫是預編譯的目標檔案(object files)的集合,它們可被鏈結程序式。靜態庫以後綴為『.a』的特殊的存檔檔案(archive file)儲存。

標準系統庫可在目錄/usr/lib/lib中找到。比如,在類 unix 系統中 c 語言的數學庫一般儲存為檔案/usr/lib/libm.a。該庫中函式的原型宣告在標頭檔案/usr/include/math.h中。c 標準庫本身儲存為/usr/lib/libc.a,它包含 ansi/iso c 標準指定的函式,比如『printf』。對每乙個 c 程式來說,libc.a 都預設被鏈結。

下面的是乙個呼叫數學庫libm.asin函式的的例子,建立檔案calc.c

#include 

#include

int main (

void

)

$ gcc -wall calc.c -o calc

/tmp/ccbr6ojm.o: in function 'main':

/tmp/ccbr6ojm.o(.text+0x19): undefined reference to 『sin』

函式sin,未在本程式中定義也不在預設庫『libc.a』中;除非被指定,編譯器也不會鏈結『libm.a』。

$ gcc -wall calc.c /usr/lib/libm.a -o calc
函式庫『libm.a』包含所有數學函式的目標檔案,比如sin,cos,exp,logsqrt。鏈結器將搜尋所有檔案來找到包含sin的目標檔案。

$ ./calc

the value of sin(2.0) is 0.909297

可執行檔案包含主程式的機器碼以及函式庫『libm.a』中sin對應的機器碼。

為避免在命令列中指定長長的路徑,編譯器為鏈結函式庫提供了快捷的選項『-l』。例如,下面的命令

$ gcc -wall calc.c -lm -o calc
與我們上面指定庫全路徑『/usr/lib/libm.a』的命令等價。

一般來說,選項-lname使鏈結器嘗試鏈結系統庫目錄中的函式庫檔案libname.a。乙個大型的程式通常要使用很多-l選項來指定要鏈結的數學庫,圖形庫,網路庫等。

數學函式庫(基本版)

在c 語言中,除了 運算以外,其他的數 算都是通過函式的形式來實現的。這些數 算函式都在數學函式庫cmath中。要使用這些數學函式,必須在程式開始處寫上預編譯命令 include 列表如下 函式型別 cmath中對應的函式 絕對值函式 int abs int x double abs double ...

Lua基礎之math 數學函式庫

abs 取絕對值 math.abs 15 acos 反余弦函式 math.acos 0.5 1.04719755 asin 反正弦函式 math.asin 0.5 0.52359877 atan2 x y的反正切值 math.atan2 90.0,45.0 1.10714871 atan 反正切函式...

Lua基礎之math庫總結 數學函式庫

lua5.1中數學庫的所有函式如下表 math.pi 為圓周率常量 3.14159265358979323846 abs取絕對值 math.abs 15 acos 反余弦函式 math.acos 0.5 1.04719755 asin 反正弦函式 math.asin 0.5 0.52359877 a...