動態(tài)庫調(diào)用靜態(tài)庫示例講解
生成動態(tài)庫: 需要的目標(biāo)文件得用-fPIC選項生成.
而靜態(tài)庫所需的目標(biāo)文件可以不用-fPIC選項.
例:
/////// 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)庫的.o文件也用-fPIC生成. 生成動態(tài)庫時把靜態(tài)庫加入.
生成應(yīng)用程序時只加載動態(tài)庫
g++ -c -fPIC static.cpp // 生成static.o
ar -r libstatic.a static.o // 生成靜態(tài)庫libstatic.a
g++ -c -fPIC shared.cpp // 生成shared.o
g++ -shared shared.o -lstatic -o libshared.so // 生成動態(tài)庫libshared.so 注: -shared是g++的選項,與shared.o無關(guān). -lstatic選項把libstatic.a的函數(shù)加入動態(tài)庫中.
g++ test.cpp -lshared -o test.exe // link libshared.so 到test.exe中.
方法二:
靜態(tài)庫的.o文件不用-fPIC生成. 生成動態(tài)庫時不加表態(tài)庫.
生成應(yīng)用程序時加載動態(tài)庫和靜態(tài)庫.
g++ -c static.cpp // 生成static.o
ar -r libstatic.a static.o // 生成靜態(tài)庫libstatic.a
g++ -c -fPIC shared.cpp // 生成shared.o
g++ -shared shared.o -o libshared.so // 生成動態(tài)庫libshared.so 注: -shared是g++的選項,與shared.o無關(guān). 這時如果加-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的實際代碼一個在.so中.一個在最后test.exe文件中. 個人覺得第一種方法更好, 因為動態(tài)庫應(yīng)該看成一個可以獨立運行的程序.
- Linux動態(tài)庫函數(shù)的詳解
- Linux靜態(tài)庫與動態(tài)庫實例詳解
- 詳解dll動態(tài)庫的開發(fā)與調(diào)用及文件的讀寫小程序
- android studio2.3如何編譯動態(tài)庫的過程詳解
- Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法
- Linux環(huán)境g++編譯GDAL動態(tài)庫操作方法
- 解決Linux程序編譯鏈接動態(tài)庫版本的相關(guān)問題
- xcode 詳解創(chuàng)建靜態(tài)庫和動態(tài)庫的方法
- 淺談Linux C語言動態(tài)庫及靜態(tài)庫
- c++實現(xiàn)加載so動態(tài)庫中的資源
- linux 程序、動態(tài)庫、靜態(tài)庫內(nèi)部添加版本號和編譯時間詳解
- 從源碼編譯Android系統(tǒng)的Java類庫和JNI動態(tài)庫的方法
- C#調(diào)用非托管動態(tài)庫中的函數(shù)方法
- Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動態(tài)庫文件的配置方法
- linux生成(加載)動態(tài)庫靜態(tài)庫和加載示例方法
- 深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
- 分析Windows和Linux動態(tài)庫
- 在動態(tài)庫和靜態(tài)庫中使用模板(dynamic libraries ,static libraries)
相關(guān)文章
Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)庫的幾種方法
隨著網(wǎng)站的運行MySQL數(shù)據(jù)庫也越來越大,備份問題也日益凸顯,使用phpmyadmin導(dǎo)出或?qū)霑r可能會因為超時文件過大等原因無法導(dǎo)入或?qū)С觥?/div> 2010-12-12apache 開啟重定向 rewrite的實現(xiàn)方法
這篇文章主要介紹了apache 開啟重定向 rewrite的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10最新評論