gcc編譯動態庫和靜態庫

2021-07-06 02:43:03 字數 1014 閱讀 3395

如果動態庫與靜態庫同時存在,未指明鏈結方式時,首先使用動態庫進行鏈結。

我的**目錄

一、具體**

1、include

void a();
void b();
2、lib

#include 

void a()

#include 

void b()

3、src

#include 

#include 「../include/a.h」

#include 「../include/b.h」

int main(int argc, char *argv)

二、生成動態庫libmyab.so

在lib目錄下生成libmyqb.so.1.0.1

建立符號鏈結

在src下編譯main.c

上述成功編譯後不能執行,執行ldd檢視依賴的動態庫,其原因是執行時系統無法找到 libmyab.so 而不能載入,因此普通使用者在 ~/.bashrc中加入環境變數ld_library_path

export ld_library_path=$ld_library_path:/home/lib(libmyqb.so所在目錄), 然後用 source ~/.bashrc 使之生效就可執行

root使用者除可以用第4步外還可以用下面方法

在/etc/ld.so.conf檔案中加入共享庫存放的目錄。

使用ldconfig重新整理系統為降低共享庫查詢的時間而建立的/etc/ld.so.cache

三、生成靜態庫libmyab.a

編譯成目標檔案

生成靜態庫 libmyab.a

編譯鏈結

gcc 編譯動態庫和靜態庫

cheungmine 2012 c程式編譯過程 windows7 cygwin gcc 在同乙個目錄下準備好下面3個檔案,其中3 2,3 3用來生成動態庫或靜態庫 主呼叫程式源 3 1 main.c cpp view plain copy print?main.c include include i...

gcc 編譯動態庫和靜態庫 2

在windows下動態鏈結庫是以.dll字尾的檔案,而在linux中,是以.so作字尾的檔案。動態鏈結庫的好處就是節省記憶體空間。1 linux下建立動態鏈結庫 在使用gcc編譯程式時,只需加上 shared選項即可,這樣生成的執行程式即為動態鏈結庫。例如有檔案 hello.c x.h main.c...

GCC編譯動態和靜態鏈結庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...