Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法
在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)拖拽功能圖文教程(支持拖放文件、拖放操作)
這篇文章主要給大家介紹了關(guān)于Qt實現(xiàn)拖拽功能(支持拖放文件、拖放操作)的相關(guān)資料,Qt是一款多平臺的C++應(yīng)用程序開發(fā)框架,它的獨特之處在于可以快速開發(fā)出拖放式的開發(fā)桌面程序,需要的朋友可以參考下2023-11-11C/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