1. 庫是一種可執行的二進位制形式檔案
2. 需要被作業系統載入記憶體執行
3. 相比於可執行程式,它不可以直接執行
4. window 和 linux 都有自己的庫,但是不相容
5. 庫有兩種,1. 靜態庫 2. 共享庫(又叫動態庫)
了解: 靜態庫 動態庫
window *.lib *.dll
linux *.a *.so
$ gcc -e a.c -o a.i // 預編譯 (預處理)
$ gcc -s a.i -o a.s // 編譯 c語法裝換為彙編語法
$ gcc -c a.s -o a.o // 彙編 彙編語法轉換為二進位制機器碼
$ gcc a.o -o a.out // 可執行程式
1. 製作
$ gcc -c hello.c -o hello.o
$ ar -crs lib***.a hello.o
靜態庫的命名規範:
必須以lib開頭,緊跟庫的名字,跟副檔名 .a
例如: lib***.a
2. 使用靜態庫
$ gcc -o a.out main.c -l路徑 -l***
-l: 指定靜態庫所在的目錄
-l: 指定靜態庫的名字 ***部分
3. 執行
$ ./a.out
1. 製作
$ gcc -fpic -c add.c -o add.o
$ gcc -shared -o lib***.so add.o
動態庫的命名規範:
必須以lib開頭,緊跟庫的名字,跟副檔名 .so
例如: lib***.so
2. 使用
$ gcc -o a.out main.c -l路徑 -l***
$ ldd a.out # 用於檢視可執行程式依賴的動態庫有哪些
3. 執行
$ ./a.out # 會報錯
動態庫的搜尋方式:
1. 將動態庫拷貝到 /lib/ 或者 /usr/lib/
$ sudo cp lib***.so /usr/lib/
2. 修改 環境變數
$ echo $path
$ echo $pwd
$ echo $home
$ echo $ld_library_path
$ export ld_library_path=$ld_library_path:/home/sky/dc20031/day4/dynameic
1. 只在當前終端有效
2. 可以將這句話,寫到 .profile
3. 修改配置檔案 /etc/ld.so.conf.d
在/etc/ld.so.conf.d 建立乙個常規檔案 lib***.conf
$ sudo touch lib***.conf # 建立配置檔案
$ sudo vi lib***.conf # 向配置檔案中寫入so檔案的路徑
/home/sky/dc20031/day4/dynameic
$ sudo ldconfig # 讓配置檔案生效
靜態庫:
1.以 ***.a 結尾命名
2.在編譯時會被鏈結到可執行檔案中
因此可執行程式體積大
浪費硬碟資源
3.在執行程式時與可執行檔案一起載入到記憶體中,
因為靜態庫**就在可執行檔案中
因此浪費記憶體資源
4.對程式更新,部署,發布帶來麻煩
動態庫:(又叫共享庫)
1.以 ***.so 結尾命名
2.在編譯時不會鏈結到可執行檔案中
因此可執行程式體積小
3.在程式執行時才被加入記憶體,因此在
程式執行時動態庫必須存在
4.有利於程式的更新,部署,發布
linux程式設計主題之標準I O與高階I O
對於標準i o庫,它們的操作是圍繞流進行的。當用標準i o庫開啟或建立乙個檔案時,我們已使乙個流與乙個檔案相關聯。對乙個程序預定義了三個流,並且這三個流可以自動地被程序使用,它們是 標準輸入 標準輸出和標準出錯,對應的檔案指標分別為stdin stdout和stderr。為了減少使用read和wri...
Linux之檔案程式設計(四)
linux檔案程式設計之安裝檔案系統 前言 可能我們機子上都按了兩個作業系統linux作業系統和xp,那麼我們一般都可以在linux下訪問xp下的檔案,但是我們卻不能在xp下訪問linux,這是為什麼呢?一.安裝檔案系統 1.由於 ext2 ext3是 linux 的標準檔案系統,所以系統把ext2...
Linux之檔案程式設計(四)
linux檔案程式設計之安裝檔案系統 前言 可能我們機子上都按了兩個作業系統linux作業系統和xp,那麼我們一般都可以在linux下訪問xp下的檔案,但是我們卻不能在xp下訪問linux,這是為什麼呢?一.安裝檔案系統 1.由於 ext2 ext3是 linux 的標準檔案系統,所以系統把ext2...