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

動(dòng)態(tài)庫(kù)調(diào)用靜態(tài)庫(kù)示例講解

 更新時(shí)間:2013年12月16日 11:58:03   作者:  
一個(gè)應(yīng)用程序調(diào)用動(dòng)態(tài)庫(kù), 而這個(gè)動(dòng)態(tài)庫(kù)其中的函數(shù)調(diào)用某靜態(tài)庫(kù)時(shí),如何生成應(yīng)用程序呢?看下面的代碼就明白了

生成動(dòng)態(tài)庫(kù): 需要的目標(biāo)文件得用-fPIC選項(xiàng)生成.

而靜態(tài)庫(kù)所需的目標(biāo)文件可以不用-fPIC選項(xiàng).

例:

復(fù)制代碼 代碼如下:

/////// 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ù)

復(fù)制代碼 代碼如下:

 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ù).

復(fù)制代碼 代碼如下:

 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)行的程序.

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論