C++学习笔记23:库
静态库(Archives)
- 后缀一般为“*.a”
- 使用两个目标文件创建单一静态库的编译与链接命令:ar cr libtest.a test1.o test2.o
- 链接器搜索静态库时,链接所有已引用而未处理的符号
- 将静态库的链接放置在命令行尾部,确保其引用被正确解析
动态库(Shared Object)
- 共享目标库(类似windows的DLL),后缀一般为“*.so”
- 编译命令:g++ -shared - fPIC -o libtest.so test1.o test2.o
- PIC:位置无关代码(Position - Independent Code)
- 编译器首先链接动态库,其次才是静态库
- 如果要强制链接静态库,编译使用-static选项
标准库与库相关性
C标准库:libc
数学库单独:libm;需要调用数学函数时,显式链接数学库:g++ -o compute compute.c -lm
C++标准库:libstdc++
编译C++11程序,使用g++ -4.8 -std=c++11 ;对于Code::Blocks等集成开发环境,在编译器设置对话框中选用C++11选项
库的相关性
- 链接时需要注意交叉引用被正确解析,例如:libtiff库需要libjpeg库(jpeg图像处理)和libz库(压缩处理)
- 独立库链接:g++ -static -o tifftest tifftest.c -ltiff -ljpeg -lz
- 相关库链接:g++ -o app app.o -la -lb -la(库之间交叉相关)
动态库的装载与卸载
动态库装载dlopen():头文件:“dlfcn.h”
函数查找与装载函数dlsym()
动态库卸载函数:dlclose()
动态库错误处理函数dlerror()
调用动态库中的函数,设函数名为g
混合c/c++编码时,c函数应该封装extern "C"{...}块中,确保名解析正确工作(c不支持函数重载)
链接选项:“-ldl”
void *handle = dlopen("libtest.so",RTLD_LAZY);
//声明函数指针指向动态库中的函数,按被调函数的名称查找
void (*test)() = dlsym(handle,"g");
(*test)();//使用函数指针调用动态库中的函数
dlclose(handle);
C++学习笔记23:库的更多相关文章
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- [Golang学习笔记] 03 库源码文件
库源码文件:不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用. 代码包声明的基本规则: 1. 同目录下的源码文件的代码包声明语句要一致.也就是说,它们要同属于一个代码包( ...
- [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Linux下汇编语言学习笔记23 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- PHP全栈学习笔记23
php,基础,流程控制,函数,字符串,数组,web交互,mysql数据库,PHP数据库编程,cookie与session,日期和时间,图形图形处理,文件和目录处理,面向对象,pdo数据库抽象层,sma ...
- Linux学习笔记(23) Linux备份
1. 备份概述 Linux系统需要备份的数据有/root,/home,/var/spool/mail,/etc及日志等其他目录. 安装服务的数据需要备份,如apache需要备份的数据有配置文件.网页主 ...
- [Android学习笔记]jackson库的使用
Jackson库一般用于序列化和反序列化操作,通常会涉及到的操作是: 1. Java Object -> Json String 2. Java Object -> Xml String ...
- Python学习笔记23:Django构建一个简单的博客网站(一个)
在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...
- ArcGIS API for JavaScript 4.2学习笔记[23] 没有地图如何进行查询?【FindTask类的使用】
从第一篇到现在都是基于地图的,不管怎么样,不管是2D还是3D,至少有个图. 这次来个没有图的例子,看看纯文字的空间查询是什么样的. 本例适用于后台查询或低性能电脑的查询. 预览图 由于4.3和4.2的 ...
随机推荐
- manacher浅析
manacher算法的输入是一个字符串,可以计算出以每个字符为中心的最长回文子串的半径.为了避免讨论奇数偶数,将原串的每两个字母之间以及前后各加一个特殊字母,比如'#',那么对于abcbb就变成了 # ...
- 关于token的杂记
http://www.cnblogs.com/xiekeli/p/5607107.html https://www.oschina.net/question/1264088_220768 token作 ...
- LaTeX常用数学符号
之前在写博客做笔记时经常会在Word或WPS里写好数学公式再截图上传,一直觉得这样很low.现在实在是不想再去截图上传了,于是决定开始学一下LaTeX.在博客园中使用数学公式的设置可以参考在博客园使用 ...
- Trying to hack Redis via HTTP requests
Trying to hack Redis via HTTP requests Context Imagine than you can access a Redis server via HTTP r ...
- Linux(centos)的常用基本命令
Linux的常用基本命令. 首先启动Linux.启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限. 在启动Linux后屏幕出现如下界面显示: …… Re ...
- 教你解决Sublime Text中文乱码问题
教你解决Sublime Text中文乱码问题[转载自成长的企鹅] Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. ...
- 深入浅出设计模式——建造者模式(Builder Pattern)
模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单 ...
- 在caffe中使用hdf5的数据
caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源 ...
- Unsupported major.minor version 51.0解决
http://blog.csdn.net/justdb/article/details/7850212 解决:项目------>右键------>属性------>Java Comp ...
- Redis设计思路学习与总结
版权声明:本文由宋增宽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/222 来源:腾云阁 https://www.qclo ...