下面小編就為大家帶來一篇Linux下g++編譯與使用靜態庫和動態函式庫的方法。 #下,我們通常在IDE如VS的工程中開發C++項目,對於生成和使用靜態庫(*.lib)與動態庫(*.
dll)可能都已經比較熟悉,但是,在linux環境下,則是另一套模式,對應的靜態函式庫(*.a)與動態函式庫(*.so)的產生與使用方式是不同的。會習慣這種使用,因為步驟上並沒有VS下配置那麼繁瑣。所以編譯器用的g++,但是與gcc的使用是相通的)首先是準備工作
,把我們需要封裝成函式庫檔案的函式的頭檔與原始檔寫好,如下:
//myAPI.h int ADD(int a, int b); int MINUS(int a, int b);
//myAPI.cpp #include "myAPI.h" int ADD(int a, int b){ return a + b; } int MINUS(int a, int b){ return a - b; }接下來準備一個測試用的主函數原始檔:
//main.cpp #include "myAPI.h" #include <iostream> int main(){ std::cout << "1 + 1 = " << ADD(1, 1) << std::endl; std::cout << "1 - 1 = " << MINUS(1, 1) << std::endl; return 0; }最後,先編譯我們的myAPI.cpp 檔案產生myAPI. o 目標檔案
g++ -c myAPI.cpp1.產生靜態函式庫並使用 Linux下以產生靜態函式庫的命令ar 處理myAPI.o 檔案生成靜態庫文件,產生的庫文件應遵循規範,及linux下庫文件加「lib」前綴。即可在專案編譯過程中利用靜態函式庫了,此時myAPI.cpp 這個函式庫函數的定義檔已經不需要了。 :
ar crv libmyAPI.a myAPI.o編譯通過後即可執行可執行檔output , 此時libmyAPI.a 也已經是不需要的了。 ##2.產生動態函式庫並使用
linux下編譯時透過-shared 參數可以產生動態函式庫(.so)文件,如下
g++ main.cpp libmyAPI.a -o output
產生的動態庫在編譯時需要聲明,運行時需要被依賴。 」標記來告訴G++
驅動程式在連接階段引用
共享函數庫libmyAPI.so。使用時如果提示如下錯誤,則將 libmyAPI.so 移到 /usr/lib 目錄下即可:./output
以上是Linux下g++編譯以及使用靜態函式庫和動態函式庫的方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!