欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法

 更新時間:2017年05月22日 10:59:00   投稿:jingxian  
下面小編就為大家?guī)硪黄狶inux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

下面就分別總結(jié)下linux下生成并使用靜態(tài)庫與動態(tài)庫的方法:(由于是C++項目,所以編譯器用的g++,但是與gcc的使用是相通的)

首先是準備工作,把我們需要封裝成庫文件的函數(shù)的頭文件與源文件寫好,如下:

//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; 
} 

接下來準備一個測試用的主函數(shù)源文件:

//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.生成靜態(tài)庫并使用

Linux下用生成靜態(tài)庫的命令 ar 處理 myAPI.o 文件生成靜態(tài)庫文件,生成的庫文件應(yīng)遵循規(guī)范,及l(fā)inux下庫文件加“l(fā)ib”前綴。所以針對本例,通過如下一條命令即可生成 libmyAPI.a 靜態(tài)庫:

ar crv libmyAPI.a myAPI.o 

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

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

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

./output 

2.生成動態(tài)庫并使用

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

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

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

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

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

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

./output 

以上這篇Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt實現(xiàn)拖拽功能圖文教程(支持拖放文件、拖放操作)

    Qt實現(xiàn)拖拽功能圖文教程(支持拖放文件、拖放操作)

    這篇文章主要給大家介紹了關(guān)于Qt實現(xiàn)拖拽功能(支持拖放文件、拖放操作)的相關(guān)資料,Qt是一款多平臺的C++應(yīng)用程序開發(fā)框架,它的獨特之處在于可以快速開發(fā)出拖放式的開發(fā)桌面程序,需要的朋友可以參考下
    2023-11-11
  • C++基于easyx圖形庫實現(xiàn)推箱子游戲

    C++基于easyx圖形庫實現(xiàn)推箱子游戲

    這篇文章主要為大家詳細介紹了C++基于easyx圖形庫實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++?STL容器與函數(shù)謂詞示例分析講解

    C++?STL容器與函數(shù)謂詞示例分析講解

    這篇文章主要介紹了C++?STL容器與函數(shù)謂詞示例,STL是“Standard?Template?Library”的縮寫,中文譯為“標準模板庫”。STL是C++標準庫的一部分,不用單獨安裝
    2022-11-11
  • C++的四種類型轉(zhuǎn)換

    C++的四種類型轉(zhuǎn)換

    這篇文章主要介紹了C++的四種類型轉(zhuǎn)換,有詳細的示例代碼展示,對于學(xué)習(xí)C++的同學(xué)有一定的參考價值,感興趣的同學(xué)可以參考本文
    2023-04-04
  • 在C語言里單引號和雙引號的區(qū)別

    在C語言里單引號和雙引號的區(qū)別

    這篇文章主要介紹了在C語言里單引號和雙引號的區(qū)別,本文通過代碼的實例和注釋的詳細的說明了單引號和雙引號的概念與區(qū)別,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中printf的兩種輸出對齊方式

    C語言中printf的兩種輸出對齊方式

    C語言中左對齊是C語言的默認輸出方式,右對齊是一種特殊的輸出方式,左對齊和右對齊都對應(yīng)著一個已知的輸出寬度,輸出的字符串根據(jù)字符串的長度在寬度上進行補充,補充字符是空格,在使用printf函數(shù)輸出時,需要在格式字符串中使用%-*s和%*s的格式來分別表示
    2024-02-02
  • C++超詳細介紹模板

    C++超詳細介紹模板

    人們需要編寫多個形式和功能都相似的函數(shù),因此有了函數(shù)模板來減少重復(fù)勞動;人們也需要編寫多個形式和功能都相似的類,于是 C++ 引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程序員的重復(fù)勞動
    2022-07-07
  • C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫的類,該類封裝了各種SQL數(shù)據(jù)庫接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫QSql增刪改查組件的應(yīng)用教程,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-12-12
  • C++檢測鍵盤某鍵是否按下的方法

    C++檢測鍵盤某鍵是否按下的方法

    今天小編就為大家分享一篇C++檢測鍵盤某鍵是否按下的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++使用數(shù)組來實現(xiàn)哈夫曼樹

    C++使用數(shù)組來實現(xiàn)哈夫曼樹

    給定N個權(quán)值作為N個葉子結(jié)點,構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長度達到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman?Tree)。哈夫曼樹是帶權(quán)路徑長度最短的樹,權(quán)值較大的結(jié)點離根較近
    2022-05-05

最新評論