动态库调用静态库示例讲解

时间:2023-02-17 15:28:57 

生成动态库: 需要的目标文件得用-fPIC选项生成.

而静态库所需的目标文件可以不用-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;
   }

方法一:

静态库的.o文件也用-fPIC生成. 生成动态库时把静态库加入.

 生成应用程序时只加载动态库


 g++ -c -fPIC static.cpp // 生成static.o

 ar -r libstatic.a static.o // 生成静态库libstatic.a

 g++ -c -fPIC shared.cpp // 生成shared.o

 g++ -shared shared.o -lstatic -o libshared.so   // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. -lstatic选项把libstatic.a的函数加入动态库中.

 g++ test.cpp -lshared -o test.exe // link libshared.so 到test.exe中.
 

方法二:

 静态库的.o文件不用-fPIC生成. 生成动态库时不加表态库.

生成应用程序时加载动态库和静态库.


 g++ -c static.cpp // 生成static.o

 ar -r libstatic.a static.o // 生成静态库libstatic.a

 g++ -c -fPIC shared.cpp // 生成shared.o

 g++ -shared shared.o -o libshared.so // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. 这时如果加-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文件中. 个人觉得第一种方法更好, 因为动态库应该看成一个可以独立运行的程序.

标签:动态库,静态库
0
投稿

猜你喜欢

  • 如何通过在线广告来获取利润?

    2007-10-13 10:51:00
  • VM12 虚拟机使用桥接模式却连不上网的解决方法(图文讲解)

    2023-08-26 06:48:10
  • 如何在godaddy Linux虚拟主机上配置MIME类型

    2010-04-10 12:49:00
  • 什么是 POP3 POP3 命令简介

    2010-03-24 18:31:00
  • 详解Linux iptables 命令

    2023-07-24 21:26:47
  • ubuntu 16.04LTS 开机启动自动更换壁纸的实现方法

    2023-08-06 05:53:15
  • Vmware vSphere 5.0安装配置方法图文教程

    2022-05-11 11:53:52
  • 提纲挈领:精心整理38条国内SEO经典语录

    2008-12-16 13:00:00
  • Win2008 R2 管理三:创建文件服务器

    2009-09-09 12:25:00
  • AdSense网页投放几个广告单元收入最高?

    2007-11-22 19:50:00
  • 未来的网页广告将大到什么程度

    2008-09-17 22:14:00
  • PHP168系统V6.02增强版发布 修正27项功能

    2009-12-16 20:50:00
  • UUcall负责人首次解释停服:我们不会圈钱跑路

    2009-10-12 08:39:00
  • Google Sitemap制作完全攻略

    2007-08-17 13:59:00
  • DeDeCMS RSS全站静态输出的实现方法

    2011-08-20 08:28:46
  • 怎样将seo融入到编辑的日常工作中

    2007-09-13 18:26:00
  • 十大步骤提高Domino邮件服务器性能

    2009-02-26 17:29:00
  • 关于QQ群推广的可行性建议

    2008-07-20 13:26:00
  • 使用docker搭建redis主从的方法步骤

    2023-05-02 13:15:45
  • IIS 如何启用 GZip 压缩

    2008-06-12 13:10:00
  • asp之家 网站运营 m.aspxhome.com