Linux之 IO程式設計四

2021-10-09 04:10:16 字數 2034 閱讀 7941

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...