動(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è)人覺(jué)得第一種方法更好, 因?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)文章
linux中Centos7的LVM磁盤擴(kuò)容問(wèn)題
本篇文章給大家詳細(xì)介紹了在linux中Centos7的LVM磁盤擴(kuò)容問(wèn)題,以及注意點(diǎn)做了分享,需要的朋友分享下吧。2018-02-02Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)庫(kù)的幾種方法
隨著網(wǎng)站的運(yùn)行MySQL數(shù)據(jù)庫(kù)也越來(lái)越大,備份問(wèn)題也日益凸顯,使用phpmyadmin導(dǎo)出或?qū)霑r(shí)可能會(huì)因?yàn)槌瑫r(shí)文件過(guò)大等原因無(wú)法導(dǎo)入或?qū)С觥?/div> 2010-12-12apache 開啟重定向 rewrite的實(shí)現(xiàn)方法
這篇文章主要介紹了apache 開啟重定向 rewrite的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10linux7下虛擬主機(jī)的三種實(shí)現(xiàn)方式
這篇文章主要介紹了linux7下虛擬主機(jī)的三種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10最新評(píng)論