Linux下gcc使用與動態庫靜態庫製作

2022-09-14 19:42:13 字數 1183 閱讀 2019

1. gcc工作流程

1. 預處理 gcc -e

2. 編譯 gcc -s

3. 彙編 gcc -c

4. 鏈結 沒引數

2.常用引數

-o: 指定生成的檔案的名字

-d: 在編譯的時候定義巨集(控制log的輸出)

-i: 指定標頭檔案的路徑

-g: gdb除錯的時候需要新增該引數

-o: 編譯優化, 3個等級 -o(1-3)

-wall: 編譯期間輸出警告資訊

3. 製作靜態庫

1. 命名規則: lib靜態庫名字.a

2. 製作步驟:

1). 生成二進位制**檔案.o

gcc -c *.c

2). 打包(將所有的.o檔案)生成.a靜態庫檔案

ar rcs 靜態庫的名字 *.o

3). 使用: (-l+庫檔案所在路徑 -l+庫名字 -i+頭檔案目錄)

gcc test.c -llibpath -llibname -o test.out -iinclude_dir

4. 製作動態庫

1). 動態庫字尾: .so -- lib動態庫名字.so

2). 製作步驟:

1). 生成與位置無關的**(.o)

gcc -fpic -c *.c -iinclude_dir

2). 將.o打包生成.so檔案

gcc -shared *.o -o libmytest.so

3). 使用(-l+庫檔案所在路徑 -l+庫名字 -i+頭檔案目錄)

gcc test.c -l./lib -lmytest -i./inlude -o test.out

4).應用程式不能執行, 動態鏈結器連線不到自己製作的庫

1>. 臨時設定的方法:

export ld_liarary_path=庫檔案所在目錄

2.> 永久設定的方法:

1. 找到動態鏈結器的配置檔案: /etc/ld.so.conf

2. 在該檔案中新增動態庫的目錄(絕對路徑)

3. 更新: sudo ldconfig -v

linux下 GCC編譯鏈結靜態庫 動態庫

目錄 回到頂部 有時候需要把一組 編譯成乙個庫,這個庫在很多專案中都要用到,例如libc就是這樣乙個庫,我們在不同的程式中都會用到libc中的庫函式 例如printf 也會用到libc中的變數 例如以後 要講到的environ變數 本文將介紹怎麼建立這樣乙個庫。這些檔案的目錄結構是 tree mai...

cygwin 下使用gcc建立和使用動態庫

參考文章 以及討論帖 摘要 cygwin下gcc只能使用.dll動態庫,不能使用.so型別的動態庫,所有在用gcc建立動態庫的時候,o的引數指定的動態庫的名字需要為lib dll。具體例項 so test.h include stdio.h void test a test a.c include ...

Linux 使用gcc生成靜態庫和動態庫

首先,庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。在linux下分為兩種,靜態庫和共享庫 動態庫 對比兩者的區別如下 庫的種類 描述優點 缺點靜態庫 目標檔案的簡單集合,linux下以.a作為字尾,程式編譯時載入 程式所需庫被載入後不會發生跨平台不相容等類似的問題 由於所需的 被載...