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  + 可执行文件名: 查询该程序在执行的时候需要加载哪些共享库。

时间: 2024-07-29 15:32:55

02.gcc入门(下)的相关文章

gcc入门

gcc入门 1. 什么是gcc gcc的全称是GUN Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++.java.Pascal等语言.gcc支持多种硬件平台. 2. gcc的特点 gcc是一个可移植的编译器,支持多种硬件平台.例如ARM.X86等等. gcc不仅是个本地编译器,它还能跨平台交叉编译.所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行.而gcc编译出来的

第二课 GCC入门之静态库以及共享库

序言: 前面一课讲了gcc的简单入门,包括gcc编译步骤:预处理:编译:汇编:链接.今天这节课就来讲下linux的库也欢迎大家吐糟共同学习. 原理: linux系统中分为2种库:静态库和共享库.静态库是以.a后缀结尾的文件,通常是在编译的链接阶段指定静态库的位置进行编译生成可执行文件,因此生成的可执行文件在执行的时候不需要静态库的参与.动态库共享库是以.so后缀结尾的文件,通常情况下代码中有需要用到共享库的地方在编译链接阶段指定共享库的路径在执行可执行文件的时候从内存表中读取代码,内存中只有一份

Shell 脚本入门--下

Shell 脚本入门--下 本为大家介绍,本篇介绍内容有:逻辑运算符(& .| .!.^).测试命令.脚本的执行过程 1.逻辑运算符 (1)&与和&&短路与 True .false 1       0 与: 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 对于&来说,如果左侧条件为false,也会计算右侧条件的值.特点只要有一个false就认为是false 短路与: false && =

2015.11.02 学习 Ubuntu下安装gosublime插件及其配置

2015.11.02 学习 Ubuntu下安装gosublime插件及其配置 1.Ctrl+shift+P 打开package control 输入pcip 回车 2.出现的框中输入gosublime,回车 3.preferences---package setting--gosublime--setting default 打开后在env{}中添加GOROOT和GOPATH 4.保存后全部复制到preferences---package setting--gosublime--setting

网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业1:OJ编程

第7单元 - 作业1:OJ编程 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 本作业是第7单元作业系列. 本单元[多个作业]之间有[前后依赖关系]. 本单元作业应[按照次序]完成. 依照学术诚信条款,我保证此作业是本人独立完成的. 1 阅读所给的代码,理解代码的主要功能及原理 补充缺失代码 提交OJ判分(10分) 题目内容: 以单例模式创建一个屏幕Screen

Linux gcc/g++下GDB调试及其调试脚本的使用

GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX/Linux平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让

网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 本单元作业练习创建模板类.单元作业会涉及冒泡排序.线性查找等算法.如果对排序.查找不熟悉,可以自行baidu或者google 依照学术诚信条款,我保证此作业是本人独立完成的. 1 编写一个数组类模板 Array,能够存储不同类型的数组元素.对数组元素进行查找.

网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 基于第8单元的作业内容,为图形类添加异常处理代码 依照学术诚信条款,我保证此作业是本人独立完成的. 1 基于第8单元作业2的代码,为图形类添加异常处理的代码.(5分) 题目具体内容参见: 第9单元 - 作业5说明:[OJ - 使用异常进行图形类的错误

02.JavaScript入门基础

一.JavaScript数据结构: 标识符(变量名和函数名) JavaScript语言中标识符最重要的3点就是: (1)第一个字符必须是字母.下划线(_)或美元符号这3种其中之一,其后的字符可以是字母.数字或下划线.美元符号: (2)变量名不能包含空格.加号.减号等符号: (3)标识符不能和JavaScript中用于其他目的的关键字同名: .关键字(JavaScript关键字是指在JavaScript语言中有特定含义,成为JavaScript语法中一部分的那些字) .常量(常量的指从定义开始就是