CLion 生成靜態 動態鏈結庫

2021-10-11 05:31:54 字數 1561 閱讀 7585

本文**

使用g++編譯

clion使用cmake編譯**

cmakelists.txt

cmake_minimum_required(version 3.17)

project(cpp-record)

set(cmake_cxx_standard 20)

# 生成動態鏈結庫

add_library(test-lib-shared shared lib/test-lib.cpp)

add_executable(lib-test-shared lib/lib-test.cpp)

target_link_libraries(lib-test-shared test-lib-shared)

# 生成靜態鏈結庫

add_library(test-lib-static static lib/test-lib.cpp)

add_executable(lib-test-static lib/lib-test.cpp)

target_link_libraries(lib-test-static test-lib-static)

庫標頭檔案 test-lib.h

#

ifndef

test_lib

#define

test_lib

/** * extern "c" 使用c函式命名規則

* __declspec(dllexport) 匯出函式

* linux不需要宣告匯出函式

* * windows編譯為dll g++ test-lib.cpp -fpic -shared -o test-lib.dll

* linux編譯為so g++ test-lib.cpp -fpic -shared -o libtest-lib.so

*/#ifdef

_win32

// extern

"c"__declspec

(dllexport)

inttest_add

(int a,

int b);#

else

extern

"c"int

test_add

(int a,

int b);#

endif

#endif

庫實現 test-lib.cpp

#

include

"test-lib.h"

inttest_add

(const

int a,

const

int b)

呼叫庫 lib-test.cpp

#

include

#include

"test-lib.h"

using

namespace std;

intmain()

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...