關於linux編譯鏈結庫問題

2021-07-25 13:33:24 字數 394 閱讀 4421

具體的需求是利用第三方的庫,自己生成乙個自己的庫,在自己的n個產品專案中都可以使用這個庫。也就是

本文是記錄一些實際操作,並不能得出什麼結論,反而會丟擲一些問題(樓樓菜鳥乙個)。

1.利用第三方庫編譯自己的庫,有兩種情況:

a. cmake中 包含所有的與自己庫相關的cpp/hpp 檔案時;

b.cmake中只包含第乙個cpp檔案;

這兩種情況都能編譯出自己的庫,區別是:

越基礎的庫越放後,因為third.a是common.a的基礎,所以 target_link_libraries(test $/common.a $/third.a)

在b情況下去鏈結自己的庫,即使包含了所有的標頭檔案,也編譯失敗,還需要包含所有的cpp檔案,但是這樣就失去了生成common庫的意義了。

linux 編譯靜態鏈結庫和動態鏈結庫

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

關於linux動態鏈結庫

找工作之餘,把apue上乙個簡單面向連線的socket程式寫了下。上面用到別的章節的函式直接都用的extern,因為前天面試問我動態鏈結庫了,就想這讓用到的這些外部函式,直接動態鏈結。順便學習下,怎麼編譯動態鏈結庫的。沒學習那麼深,只是知道怎麼製作,應用就好,可中間還是碰到了點小問題。要判斷乙個程式...

Linux 關於動態鏈結庫以及靜態鏈結庫的一些概念

庫有動態與靜態兩種,動態通常用.so為字尾,靜態用.a為字尾。例如 libhello.so libhello.a 為了在同一系統中使用不同版本的庫,可以在庫檔名後加上版本號為字尾,例如 libhello.so.1.0,由於程式連線預設以.so為檔案字尾名。所以為了使用這些庫,通常使用建立符號連線的方...