动态库调用静态库示例讲解
发布时间: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文件中. 个人觉得第一种方法更好, 因为动态库应该看成一个可以独立运行的程序.


猜你喜欢
- 本报记者 雷中辉 北京报道“我们还没有接到实施细则的通知,具体怎么办还不清楚。”7月22日,北京市工商行政管理局大厅,当记者询问电子商务网店
- 软件霸主微软或将在操作系统市场遇到强有力的竞争者,同时其占领操作系统九成份额的市场格局也将随之改变。昨日,谷歌向所有人免费开放操作系统Chr
- 1>单线程或者单进程相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个clien
- 一、服务端1.用YUM源下载NFS相关服务 2.创造共享目录并在NFS相关配置文件写入共享目录 3.使用ex
- 7月18日消息,Discuz!云平台旗下的社区QQ群功最新推出了两个新功能:默认长版显示和绑定群提醒功能。这是Discuz! 云平台自201
- 最近,有做博客营销的网友问:“怎样才能使自己的博客旺起来,使其人气旺、浏览量和点评量高。”其实这一问
- Linux为美国以外的其它国家提供了自主发展操作系统的一条捷径。主要是因为Linux操作系统本身的源代码是公开的,操作系统开发方可以对源代码
- 有Godaddy主机用户朋友遇到这样的问题:从旧服务器的域名服务器重新定位前,能在新托管帐户上运行脚本吗?这是不能的,没有到服务器的真实路径
- 网站可用性关系到它能为用户节省多少时间。网站可用性越高,用户体验也就越高,用户也就会增加停留在网站上的时间。当一个经验不足的用户通过你网站的
- FTP的全称是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。而FTP服务器,则是在互联
- 1、将当前位置的“主页”字样,改为“你自己的网站名称”。解释
- 这个对于新手来说,也是比较困惑的问题,谈谈我对这个问题的认识。一:rpm包rpm包,分两种,binary rpm 跟 source rpmb
- 内容摘要:编写通用的SQL防注入程序一般的http请求不外乎get 和 post,所以只要我们在文件中过滤所有post或
- WordPress 3.0已经发布有差不多半个月了,如前面这篇帖子所介绍,WP3.0有个对我们来说比较实用的功能,就是他的多站点模式。Wor
- 这几条都是在管理中心学来的,可能有些朋友没有注意。1、杜绝内容复制,就是说多地址指向同一内容,收录太多重复内容,浪费存储资源,所以大多搜索引
- 网站进行SEO改版的目的是為了使自身的网站能更吸引搜索蜘蛛的爬行,从而获得最高的关键字排位,更高的网站权重,而改版就无可避免会遇到一个 SE
- 邮件服务器是一个网站所必需的服务。在这里,我们可以通过MDaemon软件来完成邮件服务器的架设。1.安装MDaemon首先,到http://
- wordpress在IIS7下如何启用wp-super-cache的高级功能,很多人都只是知道有这么一个插件,开启了之后却发现并不好用。之所
- 网站管理员们不愿看到的一件事就是自己的网站被Google收录的页面突然变得很少。也就是说,您的网站以前或许有成千上百页被Google收录,但
- Discuz 的“Title标题附加字”可以做为论坛的副标题使用,但在Discuz论坛后台设置(全局,优化设置,标题附加字),这个副标题则应