path就是乙個環境變數,存放的是一些系統或者軟體的路徑,在path中新增過路徑的應用程式,可以直接使用檔名進行呼叫。
1) windows 系統的配置
我的電腦 => 右鍵,選擇屬性 => 高階 => 環境變數 => 系統變數path => 在原來的path後加分號『;』加具體的路徑。
2) linux系統環境變數
export path=$path:.
解析:$path – 將原來的path的內容獲取出來
: - 各種路徑之間的分割符號
. - 當前目錄
echo $path - 將path的內容列印出來(回顯)。
只會在當前終端中有用,想永久有用則可以開啟
vi ~/.bashrc 《回車》
在該檔案的末尾新增
export path=$path:.
執行source~/.bashrc 這樣就可以讓配置檔案生效。
3) 程式設計相關的環境變數
cpath – c語言標頭檔案的路徑
library_path – 庫檔案的路徑
ld_library_path – 載入共享庫的路徑
4) 查詢標頭檔案
a) <>表示從系統預設的路徑下查詢該檔案
一般來說在 /usr/include/目錄下
b) 「」表示從當前檔案目錄下查詢該檔案
c) 配置相關的環境變數cpath
如: export cpath=$cpath:..
d) 通過編譯選擇項指定標頭檔案的位置
gcc –i檔案路徑 ***.c
大寫i後面跟路徑
為了呼叫者使用方便,一般程式不會直接提供.c檔案或.o檔案,而是將檔案打包成具體的庫檔案,只需要提供庫檔案和對應的標頭檔案即可。
1)分類
庫檔案主要分為:靜態檔案 和 共享庫檔案
2)比較
靜態庫:
使用靜態庫時,直接把**/指令複製到目標檔案中,目標檔案顯得比較龐大,修改和維護都不方便;可以脫離靜態庫檔案,效率比較高。
共享庫:
使用共享庫時,把**/指令對應的位址複製到目標檔案中,目標檔案比較小,修改和維護比較方便;不可以脫離共享庫檔案,效率比較低(使用頻繁)。
3)相關的命令
ldd a.out => 檢視a.out 所以來的動態庫檔案
gcc/cc -static ***.c =>要求按照靜態庫方式編譯鏈結,得到的可執行檔案會比較大。
(1)靜態庫的生成步驟
a) 編寫源** ***.c 如:adder.c
b) 只編譯不連線,如:gcc -c adder.c 生成adder.o
c) 使用命令ar –r lib庫名.a ***.o生成靜態庫
如: ar –r(插入) libadder.a adder.o
(2)靜態庫的使用步驟
a) 編寫呼叫的源程式 ***.c 如vi main.c
b) 只編譯不連線源程式如:gcc –c main.c
c) 鏈結目標檔案和靜態庫檔案
i. 直接鏈結
gcc main.o libadder.a
ii. 通過選項鏈結(掌握)
gcc main.o –l(小寫)庫名 –l(大寫).庫檔案所在路徑
gcc main.o –l adder –l.
iii. 配置環境變數library_path
export library_path=$library_path:.
gcc main.o –l adder
(1)共享庫的生成步驟
a) 編寫源程式***.c 如:adder.c
b) 只編譯不連線
如:gcc –c –fpic(小模式) adder.c
c) 使用選項生成共享庫
如:gcc -shared adder.o –o lib庫名 .so
(2) 共享庫的使用步驟
a) 直接鏈結
gcc main.o libadder.so
b) 使用選項鏈結
gcc main.o -l adder -l.
c) 使用環境變數library_path
export library_path=$library_path:.
gcc main.o –l adder
注意:
對共享庫檔案的使用,要配置環境變數後再執行
export ld_library_path=$ld_library_path:.
#include
void *dlopen(const char *filename, int flag);
第乙個引數:檔名
第二個引數:開啟標誌/開啟方式
rtld_lazy -----延遲載入
rtld_now-----立即載入
函式的功能:
按照第乙個引數指定的檔名去(延遲/立即)載入動態庫。
成功返回乙個void * 的控制代碼。
char *dlerror(void);
函式功能:表示返回最後一次錯誤的資訊,如果沒有錯誤就返回null
void *dlsym(void *handle, const char *symbol);
第乙個引數:dlopen函式的返回值
第二個引數:字串型別的函式名
函式功能:獲取handle指向的共享庫檔案中的symbol載入
int dlclose(void*handle);
函式功能:關閉指定的共享庫檔案
注意:編譯時需要增加
:-ldl
作業:程式設計列印空心的菱形和實心菱形,分別使用靜態庫的方式和動態庫的方式進行打包和使用。
********
**** * *
**** * *
**** ****
Linux C 函式參考之環境變數篇
getenv 取得環境變數內容 相關函式 putenv,setenv,unsetenv 表頭檔案 include 定義函式 char getenv const char name 函式說明 getenv 用來取得引數name環境變數的內容。引數name為環境變數的名稱,如果該變數存在則會返回指向該內...
linux c 程式設計 環境變數的操作函式
1.描述 搜尋當前系統name所指向的環境變數。2.標頭檔案 stdlib.h 3.宣告 char getenv const char name 4.引數 const char name 需要獲得的環境變數名稱5.返回值 該函式返回乙個以 null 結尾的字串,該字串為被請求環境變數的值。如果該環境...
linux環境程式設計 環境變數 列印環境變數
在shell程式設計主題中,我們已經大致的介紹過 環境變數和本地變數啦 我們今天來具體的介紹介紹,那環境變數到底是什麼呢?是我 一.環境變數含義 特徵 環境變數是指 作業系統中用來指定作業系統執行環境的一下引數 1 特徵 字串 有統一的格式 名 值 值 值用來描述程序的環境資訊 2 使用形式 與命令...