在結構體程式中的位元組對齊情況下讀取字元長度的方法,其程式如下:
如圖所示在程式中有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...