動(dòng)態(tài)庫(kù)調(diào)用靜態(tài)庫(kù)示例講解
生成動(dòng)態(tài)庫(kù): 需要的目標(biāo)文件得用-fPIC選項(xiàng)生成.
而靜態(tài)庫(kù)所需的目標(biāo)文件可以不用-fPIC選項(xiàng).
例:
/////// static.h
void static_print();
///////static.cpp
#include <iostream>
#include "static.h"
void static_print() {
std::cout<<"This is static_print function"<<std::endl;
}
////// shared.h
void shared_print();
////// shared.cpp
#include <iostream>
#include "shared.h"
#include "static.h"
void shared_print() {
std::cout<<"This is shared_print function";
static_print();
}
////////test.cpp
#include "share.h"
int main()
{
shared_print();
return 0;
}
方法一:
靜態(tài)庫(kù)的.o文件也用-fPIC生成. 生成動(dòng)態(tài)庫(kù)時(shí)把靜態(tài)庫(kù)加入.
生成應(yīng)用程序時(shí)只加載動(dòng)態(tài)庫(kù)
g++ -c -fPIC static.cpp // 生成static.o
ar -r libstatic.a static.o // 生成靜態(tài)庫(kù)libstatic.a
g++ -c -fPIC shared.cpp // 生成shared.o
g++ -shared shared.o -lstatic -o libshared.so // 生成動(dòng)態(tài)庫(kù)libshared.so 注: -shared是g++的選項(xiàng),與shared.o無(wú)關(guān). -lstatic選項(xiàng)把libstatic.a的函數(shù)加入動(dòng)態(tài)庫(kù)中.
g++ test.cpp -lshared -o test.exe // link libshared.so 到test.exe中.
方法二:
靜態(tài)庫(kù)的.o文件不用-fPIC生成. 生成動(dòng)態(tài)庫(kù)時(shí)不加表態(tài)庫(kù).
生成應(yīng)用程序時(shí)加載動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù).
g++ -c static.cpp // 生成static.o
ar -r libstatic.a static.o // 生成靜態(tài)庫(kù)libstatic.a
g++ -c -fPIC shared.cpp // 生成shared.o
g++ -shared shared.o -o libshared.so // 生成動(dòng)態(tài)庫(kù)libshared.so 注: -shared是g++的選項(xiàng),與shared.o無(wú)關(guān). 這時(shí)如果加-lstatic. error:relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
g++ test.cpp -lshared -lstatic -o test.exe // link libshared.so 到test.exe中.
兩種方法的不同之處在于static_print的實(shí)際代碼一個(gè)在.so中.一個(gè)在最后test.exe文件中. 個(gè)人覺得第一種方法更好, 因?yàn)閯?dòng)態(tài)庫(kù)應(yīng)該看成一個(gè)可以獨(dú)立運(yùn)行的程序.
- Linux動(dòng)態(tài)庫(kù)函數(shù)的詳解
- Linux靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)實(shí)例詳解
- 詳解dll動(dòng)態(tài)庫(kù)的開發(fā)與調(diào)用及文件的讀寫小程序
- android studio2.3如何編譯動(dòng)態(tài)庫(kù)的過(guò)程詳解
- Linux下g++編譯與使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的方法
- Linux環(huán)境g++編譯GDAL動(dòng)態(tài)庫(kù)操作方法
- 解決Linux程序編譯鏈接動(dòng)態(tài)庫(kù)版本的相關(guān)問(wèn)題
- xcode 詳解創(chuàng)建靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的方法
- 淺談Linux C語(yǔ)言動(dòng)態(tài)庫(kù)及靜態(tài)庫(kù)
- c++實(shí)現(xiàn)加載so動(dòng)態(tài)庫(kù)中的資源
- linux 程序、動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)內(nèi)部添加版本號(hào)和編譯時(shí)間詳解
- 從源碼編譯Android系統(tǒng)的Java類庫(kù)和JNI動(dòng)態(tài)庫(kù)的方法
- C#調(diào)用非托管動(dòng)態(tài)庫(kù)中的函數(shù)方法
- Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動(dòng)態(tài)庫(kù)文件的配置方法
- linux生成(加載)動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)和加載示例方法
- 深入探討Linux靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的詳解(一看就懂)
- 分析Windows和Linux動(dòng)態(tài)庫(kù)
- 在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)中使用模板(dynamic libraries ,static libraries)
相關(guān)文章
Centos7 格式化分區(qū)并掛載的實(shí)現(xiàn)
這篇文章主要介紹了Centos7 格式化分區(qū)并掛載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
apache的AllowOverride以及Options使用詳解
通常利用Apache的rewrite模塊對(duì) URL 進(jìn)行重寫的時(shí)候, rewrite規(guī)則會(huì)寫在 .htaccess 文件里。但要使 apache 能夠正常的讀取.htaccess 文件的內(nèi)容,就必須對(duì).htaccess 所在目錄進(jìn)行配置2012-11-11
3分鐘學(xué)會(huì)如何上手supervisor看門狗
這篇文章主要介紹了3分鐘學(xué)會(huì)如何上手supervisor看門狗,文章中操作步驟講解的很清楚,有需要的同學(xué)可以研究下2021-02-02

