首頁 >運維 >linux運維 >Linux下g++編譯以及使用靜態函式庫和動態函式庫的方法詳解

Linux下g++編譯以及使用靜態函式庫和動態函式庫的方法詳解

黄舟
黄舟原創
2017-05-28 11:32:404685瀏覽

下面小編就為大家帶來一篇Linux下g++編譯與使用靜態庫和動態函式庫的方法。 #下,我們通常在IDE如VS的工程中開發C++項目,對於生成和使用靜態庫(*.lib)與動態庫(*.

dl

l)可能都已經比較熟悉,但是,在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.cpp

1.產生靜態函式庫並使用

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn