linux初探之庫檔案

2021-10-04 04:26:43 字數 1153 閱讀 5416

一般來說 linux下的庫檔案的命名規範為:

靜態庫的名字一般為lib***x.a

動態庫的名字一般為lib***x.so.主版本號.副版本號

gcc –o是將.c原始檔編譯成為乙個可執行的二進位制**(-o選項其實是制定輸出檔案檔名,如果不加-c選項,gcc缺省會編譯連線生成可執行檔案,檔案的名稱有-o選項指定),這包括呼叫作為gcc內的一部分真正的c編譯器(ccl),以及呼叫gnu c編譯器的輸出中實際可執行**的外部gnu彙編器(as)和聯結器工具(ld)。

gcc –c是使用gnu彙編器將原始檔轉化為目標**之後就結束,在這種情況下,只呼叫了c編譯器(ccl)和彙編器(as),而聯結器(ld)並沒有被執行,所以輸出的目標檔案不會包含作為linux程式在被裝載和執行時所必須的包含資訊,但它可以在以後被連線到乙個程式。

2.1 靜態庫

由原始檔編譯生成一堆.o,每個.o裡都包含這個編譯單元的符號表

通過ar命令將很多.o轉換成.a,成為靜態庫

通過staic引數gcc編譯鏈結

$ ar rcs libmylib.a mylib.o

$ gcc -o (可執行檔名) main.c -static -l.

-lmylib

2.2 動態庫

動態庫的字尾是.so,它由gcc加特定引數編譯產生。

$ gcc mylib.c -shared -fpic -o libmylib.so

$ gcc -o myprogram main.c -l.

-lmylib

使用」-lmylib」標記來告訴gcc驅動程式在連線階段引用共享函式庫libmylib.so。

編譯生成myprogram之後可通過ldd命令檢視是否連線正常

-shared該選項指定生成動態連線庫(讓聯結器生成t型別的匯出符號表,有時候也生成弱連線w型別的匯出符號),不用該標誌外部程式無法連線。相當於乙個可執行檔案

-l.:表示要連線的庫在當前目錄中

ld_library_path:這個環境變數指示動態聯結器可以裝載動態庫的路徑。

當然如果有root許可權的話,可以修改/etc/ld.so.conf檔案,然後呼叫 /sbin/ldconfig來達到同樣的目的,不過如果沒有root許可權,那麼只能採用輸出ld_library_path的方法了。

Linux 多執行緒 pthread庫初探

linux 多執行緒 pthread庫用法 一 linux 執行緒有時候也叫light weight processlwp 輕量級執行緒,是程序的乙個執行流,有自己的執行棧,是作業系統排程的最小單位。多執行緒優勢在於切換開銷小,同程序內通訊方便,涉及io等阻塞性操作時可以單獨開乙個執行緒不阻塞主流程...

Linux檔案系統初探(1)

首先要回答這樣乙個問題 為什麼要寫這樣的文章?網路中已經有大量這樣的教程和介紹。我的回答和codproject上的一位大牛的回答是類似的,其一是 對於初學者來說資訊越多越好,多角度的對同乙個問題或者概念進行描述對理解問題和概念是大有好處的。其二是 這樣把學習的東西講述出來才能更好的幫助自己理解概念。...

初探大資料之常用Linux命令

ls 顯示當前目錄下的檔案資訊 pwd 顯示當前目錄檔案位置 vi 編輯檔案 vi test.txt touch 建立空檔案 touch test.txt hostname 檢視主機名稱 sync 把記憶體中的資料持久化到硬碟中 reboot 重啟計算機,相當於shutdown r now,如果是1...