Ubuntu下UnixC的第二天

2021-09-09 06:16:17 字數 3076 閱讀 2116

回憶昨天的內容

一、什麼是作業系統

計算機的作業系統是一款管理計算機資源的軟體,

計算機資源包括硬體資源和軟體資源。

系統軟體 應用軟體

二、計算機語言的發展史

機器語言  組合語言 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...