02.gcc入门(下)
◊基本框架:
a) 外部库的使用
b) 静态库与共享库的区别
c) 静态库的生成
d) 共享库的生成
2.1外部库的使用
2.1.1库文件的特点:
1)库文件实际上是一些.o文件的打包;
2)是按照可重用的原则编写的;
3)通常由一组相互关联的函数构成;
4)软件的可维护性能好,若软件升级的话,通常只需修改库代码,而不用修改使用库的代码(只要使用库的接口没有改变)。
2.2.2头文件与库文件的系统存放位置
头文件:/usr/include /usr/local/include
库文件:/usr/lib /usr/local/lib
2.2.3 外部库的使用
-lname 表示要链接libname.so 或者libname.a 库文件
如果静态库和共享库均存在,则系统会优先链接共享库。
2.2静态库与共享库的区别
静态库(.a)的特点:
1)程序在链接的时候把所需要库中相应的函数代码链接到可执行文件中;
2)运行的时候不再需要静态库;
3)若多个程序使用同一个库,则需要库中相关代码的多个copy,所以对内存和磁盘空间耗费较大。
共享库(.so)的特点:
1) 当程序运行时,由操作系统将库代码从磁盘加载到内存中,这个过程叫做动态链接;
2) 运行的时候需要共享库的存在;
3)若多个程序使用同一个共享库,则当程序运行的时候,只需向内存加载一份库代码,多个程序共享使用同一份库;
又因为可执行程序中仅仅包含它用到的函数入口地址的一个表,而不是库代码的拷贝;
所以节省了内存和磁盘空间;
4)因为可执行程序中没有库代码的相关拷贝,所以维护性能好。
2.3静态库的生成
2.3.1静态库的生成
Ar rcs libname.a name.o
Rcs表示(replace、create、save)
Ar t 查询一个静态库中有多少个.o文件
2.3.2库的搜索路径:
1) 从左到右搜索 –I –L 指定的目录; (最好使用第1种方法来设定)
2) 由环境变量指定的目录
设定方法:给配置文件(~/.bash_profile)中相应的环境变量添加搜索路径:
export C_INCLUDE_PATH=……
export CPP_INCLUDE_PATH=……
export LIBRARY_PATH=……
然后执行该配置文件即可。
3) 系统默认的搜索目录
/usr/include /usr/lib
2.4共享库的生成
2.4.1共享库的生成
Gcc –shared -fPIC hello.o –o libhello.so
fPIC: 用来产生位置无关码(position independent code)
2.4.2运行共享库需要做的一些配置(2种方法)
1)拷贝.so文件到系统共享库路径下: /usr/lib
2) 设定环境变量: LD_LIBRARY_PATH (最好使用第二种方法)
2.4.3 ldd + 可执行文件名: 查询该程序在执行的时候需要加载哪些共享库。
转载于:https://www.cnblogs.com/zkw-2014/p/4417947.html
02.gcc入门(下)相关推荐
- MyBatis-学习笔记02【02.Mybatis入门案例】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- 02前端入门HTML5 +CSS3+电商网页制作:CSS
02前端入门HTML5 +CSS3+电商网页制作 0 来源 1 CSS基础 1.1 基础认识 1.1.1 css demo 1.1.1 css的层叠性 1.2 CSS引入方式 1.3 选择器 1.4 ...
- rapidxml在qt linux(gcc)下写xml文件出错
在linux(gcc)下使用qt写入xml出错,代码如下: 错误如图:这里写图片描述 在网上找了好久没有找到答案,最后在http://stackoverflow.com/questions/14113 ...
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- GCC编译器下NRV优化
阅读侯捷老师翻译的深度探索C++对象模型时所进行的相关测试以及自己的理解 文章目录 一.浅讲NRV优化 二.测试代码 三.运行结果 四.结果分析以及解释 五.相关思考 六.没有NRV优化时的情况 总结 ...
- Linux下gcc入门
1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...
- mysql 5.6开启binlog_docker快速入门02——在docker下开启mysql5.6 binlog日志
1.检查容器状态 1 [root@localhost ~]# docker ps 执行这个命令可以看到所有正在运行当中的容器,如果加上-a参数,就可以看到所有的容器包括停止的. 我们可以看到容器正在运 ...
- Eclipse GCC 入门
下面是本人入门的一些做法及结论: 1. 安装:下载Eclipse3.5 CPP版本 和Cygwin. 如果Cygwin安装成功, 则配置开发环境基本无问题.网上有关于Cygwin和MinGW的Ecli ...
- mtl库在GCC编译器下的使用
最近一直在改造算法库,将其移植到Linux平台下.使用GCC编译器是发现MTL库中出现一大堆的问题.使用的MTL库下载地址为:http://osl.iu.edu/research/mtl/downlo ...
最新文章
- JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)
- 【每日随笔】电子签名 ( 下载 “e 签保“ 应用 | 使用 手机号 + 短信验证码 登录 | 发起签署 | 签名 | 获取签名后的 PDF 文件及出证信息 )
- 【Linux】JDK+Eclipse 搭建C/C++开发环境
- [转]文件浏览直接显示[兼容IE,FireFox]
- 桌面快捷键和桌面livefolder
- Spring Environment
- 小白学爬虫——第一部分:简单学习Python
- Proxmox VE2.2虚拟化安装配置学习笔记(三)
- Atitit 朋友圈 微博 之道 朋友圈的dos and donts
- 清华自动化大一 C++作业引爆全网,特奖得主、阿里P6:我们也做不到
- 微信小程序怎样关闭直播插件
- Oracle19C下载安装教程(图文详解)
- vmware死机,mvx.exe进程关不掉情况
- v-charts 如何更改文本颜色
- 《蔡康永的说话之道》思维导图学习笔记
- 宏基掠夺者圣盾5000、圣盾3000 评测
- CAD、3dmax等Autodesk系列软件安装报错1603解决办法
- ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.11
- 如何动态使用烘焙出来的ReflectionProbe-0.exr信息
- 浅谈压缩感知(二):理论基础