91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux下g++編譯與使用靜態庫和動態庫的方法

發布時間:2020-09-19 07:41:58 來源:腳本之家 閱讀:561 作者:jingxian 欄目:編程語言

在windows環境下,我們通常在IDE如VS的工程中開發C++項目,對于生成和使用靜態庫(*.lib)與動態庫(*.dll)可能都已經比較熟悉,但是,在linux環境下,則是另一套模式,對應的靜態庫(*.a)與動態庫(*.so)的生成與使用方式是不同的。剛開始可能會不適應,但是用多了應該會習慣這種使用,因為步驟上并沒有VS下配置那么繁瑣。

下面就分別總結下linux下生成并使用靜態庫與動態庫的方法:(由于是C++項目,所以編譯器用的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”前綴。所以針對本例,通過如下一條命令即可生成 libmyAPI.a 靜態庫:

ar crv libmyAPI.a myAPI.o 

接下來即可在項目編譯過程中利用靜態庫了,此時 myAPI.cpp 這個庫函數的定義文件已經不需要了。main.cpp 編譯命令如下(注意,依賴的靜態庫文件要放在被依賴項后面):

g++ main.cpp libmyAPI.a -o output 

編譯通過后即可運行可執行文件 output , 此時 libmyAPI.a 也已經是不需要的了。執行命令并輸出結果如下:

./output 

Linux下g++編譯與使用靜態庫和動態庫的方法

2.生成動態庫并使用

linux下編譯時通過 -shared 參數可以生成動態庫(.so)文件,如下

g++ -shared -fPIC -o libmyAPI.so myAPI.o 

生成的動態庫在編譯時需要聲明,運行時需要被依賴。聲明如下

g++ main.cpp -L. -lmyAPI -o output  

”-L.”標記告訴G++函數庫可能位于當前目錄;使用”-lmyAPI”標記來告訴G++驅動程序在連接階段引用共享函數庫libmyAPI.so。

使用時如果提示如下錯誤,則將 libmyAPI.so 移到 /usr/lib 目錄下即可:

./output 

Linux下g++編譯與使用靜態庫和動態庫的方法

以上這篇Linux下g++編譯與使用靜態庫和動態庫的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翁牛特旗| 吉隆县| 天长市| 宣武区| 高台县| 当阳市| 泰来县| 同仁县| 虞城县| 西和县| 德州市| 剑河县| 上杭县| 云阳县| 哈巴河县| 富顺县| 英超| 邮箱| 邳州市| 麻江县| 景宁| 囊谦县| 新竹县| 武川县| 长岭县| 连城县| 莆田市| 葫芦岛市| 新河县| 苏州市| 紫阳县| 云南省| 穆棱市| 阿尔山市| 泽库县| 全椒县| 垣曲县| 嵩明县| 集贤县| 沙坪坝区| 陈巴尔虎旗|