回憶昨天的內容
一、什麼是作業系統
計算機的作業系統是一款管理計算機資源的軟體,
計算機資源包括硬體資源和軟體資源。
系統軟體 應用軟體
二、計算機語言的發展史
機器語言 組合語言 c語言
預處理 編譯 彙編 鏈結 載入
今天內容
一、大型專案的**組織
規則 約定
標頭檔案內容:
1標頭檔案衛士#ifndef....
2函式的宣告
3檔案的包含
4巨集定義
5型別的定義
6變數的宣告 int val;extern int val;
變數的宣告和定義的區別
變數的定義是為變數分配空間的,變數的宣告是變數的空間已經存在,擴充變數的作用域。
編寫** 實現工程
**參見 pmat**件夾
編譯的基本單位是原始檔,編譯的時候,在檢查程式是不是符合c語言的語法
nm 二進位制檔案
檢視二進位制檔案中的符號表
符號表 存放的是程式中的符號 函式的名字,全域性變數的名字,靜態區域性變數的名字
目標檔案 可重定位的目標檔案
file 檔名 檢視檔案型別
鏈結發生在生成可執行檔案的時候 靜態鏈結
動態鏈結 發生在程式執行的時候
二、靜態庫的製作和使用
函式庫 倉庫檔案裡存放的是多個函式
根據函式庫中函式鏈結的方式,分為靜態庫和動態庫
靜態庫的命名規則 lib+庫名.a
靜態庫的製作步驟:
1 將要加入靜態庫的原始檔編譯為目標檔案
2 將這些目標檔案加入到靜態庫檔案中,建立靜態庫檔案
ar -r libt_math.a *.o
3 使用靜態庫檔案鏈結生成可執行檔案
gcc mailou.o -lpmath -lt_math
-l路徑 鏈結器到這個路徑下找庫檔案
-l庫名 指定要鏈結的庫的名字
系統指定路徑 -i路徑 將路徑新增到系統指定路徑
三、環境變數的初識
環境變數跟程序相關,程序的環境變數
程式和程序的關係
程式是計算機指令的集合,儲存在硬碟
程序是正在執行的程式,儲存在記憶體
乙個程式執行一次產生乙個程序,程序實際上是程式執行過程中對計算機資源使用情況的描述
程序是程式執行的例項
每個程序都有自己的身份證 pid
bash程序的環境變數和自定義變數
如何檢視bash程序的環境變數env
user=tarena
格式:name=value
=號兩邊絕對不允許空格
如何獲取乙個環境變數的值呢?
$name 取環境變數name的值
echo字串 將字串輸出到顯示器
echo $user 將環境變數user的值輸出到顯示
怎麼改變環境變數的值
name=newvalue
如何增加乙個環境變數
1、增加乙個自定義變數
name=value
補充:管道,
grep 字串 檔名 在檔案中查詢字串,將包含字串的行全部顯示出來。
command1|command2 command1的標準輸出是command2的標準輸入
env|grep user
2、將自定義變數變為環境變數
export 變數名
path export path=$path:.
vi ~/.bashrc開啟環境變數 ,使用者可以在裡面修改
ps1 指定shell的提示符 ps1=「\w\$」只顯示最後乙個資料夾
~ 使用者的家目錄
四、動態庫的製作和使用
一、製作和使用的步驟
1、將要加入的動態庫的原始檔編譯為目標檔案(與位置無關)
gcc -c *.c -fpic
2、將第一步生成的目標檔案,打包進動態庫中
gcc -shared -o libt_math.so *.o
3、使用動態庫生成可執行檔案
gcc mailou.c -lpmath -lt_math
4、執行啊.out
動態庫也叫共享庫
載入器 載入a.out到記憶體執行的之後,需要載入a.out依賴的動態庫檔案
如何檢視a.out依賴哪一些動態庫
ldd a.out
此時需要讓載入器找到動態庫
1 使用環境變數告訴載入器的搜尋路徑
ld_library_path=pmath
export ld_library_path
或者export ld_library_path=$ld_library_path:.
ld_library_path 有很多的路徑,這些路徑是載入器找動態庫的路徑
2 載入器和鏈結器預設的路徑是/lib或者/usr/lib,可以將動態庫剪下到該路徑
二、動態載入
在程式執行過程中,需要載入某個動態庫的時候,向動態鏈結器傳送載入所需動態庫的請求。動態鏈結器載入動態庫。這個就是動態載入。
動態鏈結器也是乙個程式,要和程式通訊,了解和動態連機器通訊的介面就可以
dlopen(3) dlclose(3) dlerror(3) dlsym(3)
#include#include"pmath/tmath.h"
int main(void)
#ifndef t_math_h_
#define t_nath_h_
int t_add(int,int);
int t_sub(int,int);
int t_mul(int,int);
int t_div(int,int);
#endif
#include"tmath.h"
int t_add(int x,int y)
int t_div(int x,int y)
int t_sub(int x,int y)
int t_mul(int x,int y)
Ubuntu下UnixC的第三天
try.c include include int main int argc,char ar printf d n argc for i 0 i s n ar i return 0 segment.c include int main void file.c include include inc...
Ubuntu 下搭建Qt Webkit(二)
其實官方的教程說的還是蠻明確的,但是看的時候有幾個小點沒有太注意,導致花費了很多沒有必要的功夫。先附上官方的指導 需要注意的點是qt一定要4.8的版本,之前的版本是無法編譯webkit的。而qt4.8目前還沒有打包好的版本,要自己從原始碼編譯。編譯原始碼之前要先解決packet dependency...
第二節 Ubuntu 安裝Dokcer
docker 安裝 apt get update apt install docker.io為了永久性保留更改,您可以修改 etc docker daemon.json 檔案並新增上 registry mirrors 鍵值。修改儲存後重啟 docker 以使配置生效。docker 要求 ubuntu...