UNIX Linux作業系統環境介紹

2021-09-25 15:06:54 字數 3265 閱讀 3895

1、支援眾程式語言、平台

2、構建過程(c**如何變成可執行檔案)

預處理:把程式設計師編譯的c**翻譯成標準c**

彙編:把預處理後的c**翻譯成彙編**

編譯:把彙編**翻譯成二進位制指令

3、gcc -v 檢視版本

4、檔案字尾

.h 標頭檔案

.gch 標頭檔案的編譯結果,一般刪除

.c 原始檔

.i 預處理檔案

.s 彙編檔案

.o 目標檔案

.a 靜態檔案

.so 共享庫檔案

5、引數

-static 優先使用靜態庫

-e 預處理

-s 彙編

-c 編譯(生成目標檔案)

-o 指定編譯結果的名字

-wall 產生盡可能多的警告

-werror 把警告當作錯誤處理

-x 指定編譯語言

-g 生成除錯資訊

-on 優化等級

-d 在編譯時定義巨集

-l 鏈結時新增庫

-i 指定標頭檔案的查詢路徑,配置環境變數

1、開啟 vim ~/.bashrc

2、在檔案末尾,新增一行export c_include_path=$c_include_path:new_path

注意:如果要刪除環境變數需要在~/.bashrc檔案中刪除環境變數後,退出終端重新開啟。

標頭檔案的作用:

1、說明對應.c檔案中的內容有哪些(宣告函式、全域性變數)

2、定義結構、聯合、列舉、巨集。

3、型別重定義

6、預處理指令

#include 	檔案包含,注意區分""和<>

#define 巨集常量和巨集函式

# 把識別符號轉換成字串

## 合併識別符號

#undef 刪除巨集

#line 指定行號

#if 根據條件決定**是否生成,可以盡量減小可執行檔案的大小

#ifndef 標頭檔案衛士,防止標頭檔案被重複包含

#error 在編譯期間產生錯誤

#warning 在編譯期間產生警告

#pragma gcc dependency 「demo.c」 用於監控檔案,防止所依賴的檔案,修改後而不知道

#pragma gcc poison goto 用於禁用某些識別符號

#pragma pack(n) 設定結構、聯合的補齊和對齊位元組數 n必須是2的較小次方且比預設值小

1、建立靜態庫

編寫源**:vi .c/.h

編譯源**:gcc -c ***.c -> ***.o

打包生成靜態庫:ar -r lib***.a x1.o x2.o ...

ar的命令的一些引數:

-r 把目標檔案新增到靜態庫中,已經存在的更新,庫檔案不存在則建立

-q 把目標檔案追加到靜態檔案末尾 ar -q libmath.a add.o

-d 從靜態庫中刪除目標檔案 ar -d libmath.a add.o

-t 顯示靜態庫中有哪些目標檔案 ar -t libmath.a

-x 把靜態庫拆分成目標檔案

2、呼叫靜態庫

(1)直接呼叫:呼叫者要和庫再同一路徑下

gcc main.c lib***.a
(2)設定環境變數:設定方法於c_include_path類似

1、開啟vim ~/.bashrc 檔案

2、在檔案末尾新增一行 export library_path=$library_path:庫檔案的路徑

4、編譯時要指定庫名 gcc main.c -lmath

(3)設定編譯引數:-l路徑

gcc main.c -l路徑 -lmath
3、執行

在編譯時已經把被呼叫函式的二進位制複製到可執行檔案中了,再執行時不再需要靜態庫檔案。

1、建立共享庫

編寫源**:vi .c/.h

編譯出位置無關的目標檔案:gcc -c -fpic ***.c -> ***.o

2、呼叫共享庫

(1)直接呼叫:呼叫者要和庫再同一路徑下

gcc main.c lib***.so
(2)設定環境變數:設定方法於c_include_path類似

1、開啟vim ~/.bashrc 檔案

2、在檔案末尾新增一行 export library_path=$library_path:庫檔案的路徑

4、編譯時要指定庫名 gcc main.c -lmath

(3)設定編譯引數:-l路徑

gcc main.c -l路徑 -lmath
3、執行

在使用共享庫時,呼叫者只是記錄了被調**在庫中的位置,因此在執行時需要共享庫同時被載入。作業系統會根據ld_library_path環境變數的設定來載入共享庫。

標頭檔案:#include

1、載入共享庫

void *dlopen(const char *filename,int flag);

filename :共享庫的庫名,或路徑

flag:

rtld_lazy 使用時才載入

rtld_now 立即載入

返回值:共享庫的控制代碼(類似檔案指標)

2、獲取識別符號位址並使用

void *dlsym(char *handle,const char *symbol);

handle:共享庫的控制代碼

symbol:識別符號的名字

3、解除安裝共享庫

int dlclose(void *handle);

handle:共享庫的控制代碼

返回值:成功返回0,失敗返回-1

4、獲取錯誤資訊

char *dlerror(void);

返回值:會把在使用共享庫的過程**現的錯誤,以字串形式返回

nm:檢視目標檔案、可執行檔案、靜態庫、共享庫中的符號列表

ldd:檢視可執行程式所依賴的共享庫

strip:**,去除掉目標檔案、可執行檔案、靜態庫和共享庫中的符號列表、除錯資訊。

objdump:顯示二進位制模組的反彙編資訊。

作業系統執行環境

程式的執行 完成與體系結構相關的工作 重點 作業系統必須了解和適配硬體 完成應用程式所需的共性任務,提供各種基礎服務 效能,安全,健壯性等問題 作業系統中的中斷 異常機制很重要,可以比作汽車的發動機,飛機的引擎.也可以說作業系統由中斷驅動或者事件驅動 i o 中斷 鍵盤上control c,印表機結...

5 作業系統環境

1.執行環境 作業系統 硬體 應用程式通過作業系統來控制硬體。同乙份 可以通過虛擬機器執行到不同的平台上。2.bios和引導 bios儲存在主機板上的rom中。開機時bios中的引導程式會把啟動盤中的 os 載入至記憶體執行。作業系統是多個程式的集合體,把共用的東西整合起來,對於解放生產力太重要了。...

作業系統課堂筆記二 作業系統執行環境

作業系統執行機制 中斷異常機制工作原理 系統呼叫機制 系統呼叫實戰 參考舉例 陷入指令 訪管指令 是一條特殊的指令,通過這條指令,可以使使用者程式向作業系統提出各種各樣的請求,例如 int,trap,syscall,sysenter sy it 核心態 使用者態 概念 cpu對系統發生某個事件的一種...