2 0 庫函式的構建

2021-06-23 02:14:26 字數 1412 閱讀 1393

在結構體程式中的位元組對齊情況下讀取字元長度的方法,其程式如下:

如圖所示在程式中有char、int、short三種型別:程式在讀取時是按照四位元組對齊的方式讀取的(即每四個位元組讀一次),在程式中計算機會先讀取char型,讀取的長度為2個位元組,由於int所占用的是4個位元組,所以在讀取int時計算機會自動選擇4的倍數進行讀取,即會在讀取char的2個位元組後會在空出兩個位元組,然後再讀取int的4個位元組,這時計算機讀取了8個位元組,然後計算機會再讀取short的2個位元組,再緊接著讀取char的1個位元組,又因為計算機是按照四位元組對齊進行讀取長度的,所以它會在char後自動空出1個長度,所以此時計算機讀取的長度為12。即程式的執行結果為:length=12。

靜態庫的編譯:

ar   -rs  libmy_math.a   *.o

這段指令的含義為:將所有的.o檔案打包成libmy_math.a(靜態庫),my_math為靜態庫的庫名。

ar    -t libmy_math.a

這段指令的含義為:將.o檔案打包到靜態庫內。

gcc   file.c(寫主函式的檔案)  -l.  –lmy_math -o  file

這段指令的含義為:將file.c檔案編譯成可執行檔案file。其中的l.表示後面跟的是路徑,即倉庫的位置。

動態庫的編譯:

gcc  -fpic  *.c

這段指令的含義為:將所有的.c檔案匯編成.o檔案。

gcc  -shared -o  lib_math.so  *.o

這段指令的含義為:將.o檔案匯編成動態庫lib_math.so(動態庫)。

ldd  file                  表示檢視鏈結。

export  ld_library_path=$ld_libary_path:.

這段指令的含義表示為:當執行載入時找到當前路徑下的動態庫。

echo  $ld_libaray

這段指令的含義為:檢視程式有沒有配置過路徑,如有會顯示(:.)。

動態庫的更新:

一、    先把.h檔案移動到/usr/include下

二、    把原有動態庫移動到/usr/lib下

三、改變定義裡面的檔案

四、先用gcc  -fpic     -c  *.c編譯成.o檔案

五、再用gcc -shared  -o  libmy_math.so *.o編譯後會生成my_math.so(動態庫)。

六、把動態庫移動到/usr/lib下,將原來的動態庫覆蓋。

七、用gcc file.c  -lmy_math  -o file進行編譯。

七、利用./file(可執行檔案)檢視。

注:動態庫的更新,只是更改的是定義裡的東西,所以動態庫的框架是不動的。

庫函式的使用

itoa atoi strrev函式的使用 atio 把字串轉換成整型數 stdlib.h itoa 將任意型別的數字轉換為字串,itoa int a,char s,c a被轉換的整數,s轉換後儲存的字元陣列,c轉換進製數 strrev 把字串s的所有字元的順序顛倒過來 不包括空字元null str...

構造庫函式

構造靜態庫 構造靜態庫要使用ar 工具 構造方法 gcc c addvec.c multvec.c 生成addvec.o和multvec.o 目標檔案 ar rcs libvector.a addvec.o multvec.o 生成libvector.a 靜態庫 使用靜態庫 可能包含類似libvec...

數學庫函式

blas和lapack是專門為線性代數開發的工具庫。blas英文全稱basic linear algebra subprograms,共有三個層次的計算 向量與向量之間的計算,比如向量的加,減,點乘 向量與矩陣之間的計算,比如乘法運算,一階矩陣和二階矩陣的更新 矩陣與矩陣之間的計算,比如矩陣相乘,k...