1 靜態庫與共享庫

2021-10-08 03:08:44 字數 1128 閱讀 5108

在linux中,庫檔案分成靜態庫和共享庫,靜態庫以.a作為字尾名,共享庫以.so結尾,所有庫都是函式打包後的集合,差別在於靜態庫每次被呼叫都會生成乙個副本,而共享庫則只有乙個副本,更節省空間。

// 這是乙個庫檔案

#include

using

namespace std;

void

printhello()

# 宣告要求的 cmake 最低版本

cmake_minimum_required

( version 2.8

)# 宣告乙個 cmake 工程

project

( helloslam )

# 設定編譯模式

set( cmake_build_type "debug"

)# 新增乙個可執行程式

# 語法:add_executable

( 程式名 源**檔案 )

add_executable

( helloslam helloslam.cpp )

# 生成庫hello

add_library

( hello libhelloslam.cpp )

# 生成共享庫hello_shared

add_library

( hello_shared shared libhelloslam.cpp )

add_executable

( usehello usehello.cpp )

# 將庫檔案鏈結到可執行程式上

target_link_libraries

( usehello hello_shared )

其中,add_library(hello libhelloslam.cpp)告訴cmake把libhelloslam.cpp編譯成名為hello的庫,此時生成的是.a字尾名的靜態庫。

使用cmake編譯整個工程的過程:

cd build

cmake .

.make

add_library(hello_shared shared libhelloslam.cpp)生成共享庫libhello_shared.so

靜態庫與共享庫

編寫使用靜態庫 靜態庫 共享庫 是包含了目標檔案的檔案,這些目標檔案被稱為模板或成員,是可以重用的預編譯 它們以特殊的格式和乙個表或者對映儲存在一起,這個表或者對映將符號名和儲存該符號的成員名字鏈結起來。對映加速了編譯和鏈結過程,靜態庫一般以副檔名.a 代表存檔檔案,archive 命名。為了使用庫...

靜態庫與共享庫

1.靜態庫 所有編譯器都提供一種機制,將所有相關的目標檔案模組兒打包成乙個單獨的檔案,被稱為靜態庫。它可以用作來聯結器的輸入,當聯結器構造乙個輸入的可執行檔案時,它只拷貝靜態庫裡面被應用程式引用的模組兒。在unix 系統中,靜態庫以存檔 一組連線起來的可重定位目標檔案的集合,有乙個頭部來描述成員目標...

靜態庫與共享庫

庫library 靜態庫在編譯連線時就把庫里的 提取出來放入可執行檔案中,程式執行時不再依賴庫。動態庫在編譯連線時只記錄了要用的名字在哪個庫的檔案中,執行時才庫檔案中找這個檔案中名字 函式或變數 並且訪問它 1 靜態庫 歸檔 lib a 1 生成庫 gcc c 1.c 2.c 只編譯不連線,產生.o...