在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...