首頁 > 運維 > linux運維 > 主體

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

黄舟
發布: 2017-05-28 11:32:40
原創
4656 人瀏覽過

下面小編就為大家帶來一篇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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!