一、首先我们来看一下什么是静态库和动态库,在这之前我们来看一下编译成可执行文件的过程:

1、静态库(.a、.lib):就是在使用的时候会把代码复制到文件中;

它的优点:独立,在链接后不需要静态库源文件

它的缺点:太占用内存空间,不利于修改和维护

2、动态库(.so、.dll):把代码的地址放到目标文件中

它的优点:占用内存空间小,维护和修改方便

它的缺点:程序运行的时候必须保证共享库能找到(不独立),速度会稍微慢一点

二、使用纯静态库格式:

gcc -static.c文件(我这里是linux系统环境下)

三、创建静态库步骤:

1、编写源程序.c文件

2、编译的时候生成.o文件

3、生成静态库.a

格式为:ar -r  库文件名称  所有的.o文件

库文件名称规范:lib 开头   .a结尾       中间放库名

即:ar -r  libmyku.a

下面看例子:

 [tu@localhost unix]$ vi day02.c   #生成一个.c源文件
[tu@localhost unix]$ gcc day02.c
[tu@localhost unix]$ ./a.out #进行编译输出,我这里利用gcc编译器
hellow world
[tu@localhost unix]$ gcc -c day02.c
#这里的意思是把.c文件改成.o文件,结果如下
[tu@localhost unix]$ ls
a.out day02.c day02.o
#生成静态库
[tu@localhost unix]$ ar -r libmyku.a day02.o
ar: 正在创建 libmyku.a
[tu@localhost unix]$ ls
a.out day02.c day02.o libmyku.a

注明:gcc 编译器的安装步骤,先安装好yum ,然后在切换到/etc/yum.repos.d/文件目录下,最后进行yum install gcc,就可以了(我这里是在线安装的gcc ,要系统连上网就可以)

静态库链接使用步骤:

1、编写使用程序.c 文件,并保存退出

2、编写.c 文件生成目标文件

gcc   -c   X.c

3、链接静态库和.o文件,有三种方式:

a、强行链接:

gcc.o文件库名称

b、双L链接法(重点):

gcc.o文件  -l库名   -L库所在目录

c、单L链接法:

gcc.o文件  -l库名称(需要配置环境变量—)

注明:ldd命令可以查看使用了那些库文件

day02,静态库和动态库的更多相关文章

  1. C++ 系列:静态库与动态库

    转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...

  2. C++静态库与动态库

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  3. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  4. Makefile中静态库,动态库的创建和使用以及解压缩命令

    应用层通过操作文件操控硬件 使用制作好的工具链: 刚开始学习时,用一些已经制作好的工具链,使用以下命令解压到gcc-3.4.5-glibc-2.3.6目录 cd /work/tools tar xjf ...

  5. VS中Debug和Realease、及静态库和动态库的区别整理(转)

    原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...

  6. Linux下C++静态库、动态库的制作与使用

    参考博文:C++静态库与动态库 >> 静态库 1. 静态库的制作 a) 编辑 name.cpp 和name.h文件 b) $g++ -c name.cpp //注意带参数-c,否则直接编译 ...

  7. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  8. VS中Debug和Realease、及静态库和动态库的区别整理

    一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码 ...

  9. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

随机推荐

  1. GitLab → 搭建私有的版本控制的托管服务平台

    开心一刻 睡着正香,媳妇用力把我晃醒说:“快起来,我爸来了.” 我一下醒了,手脚熟练的把衣服一抱,滚到床底,顺便把鞋也收了进去 媳妇蹲下无奈的说:“快出来!咱俩都结婚半年了.” 我:“对哦,搞习惯了” ...

  2. wxPython4.0.4关于我们

    源码地址:https://download.csdn.net/download/zy0412326/12154342 wxPython4改版后将AboutBox方特到adv包里面.如果想快速实现GUI ...

  3. 微信小程序api封装

    写多 之后,吸取之前的经验,瞎写了一个简单的封装api,有幸看到的朋友,就随便看看哈,如果能给到你帮助就一直棒了,额呵呵呵! 新建constant.js和api.js文件 在constant.js中统 ...

  4. 一个使用fasttext训练的新闻文本分类器/模型

    fastext是什么? Facebook AI Research Lab 发布的一个用于快速进行文本分类和单词表示的库.优点是很快,可以进行分钟级训练,这意味着你可以在几分钟时间内就训练好一个分类模型 ...

  5. 字符串-mask-每个元音包含偶数次的最长子字符串

    2020-03-08 00:23:04 问题描述: 给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 'a','e','i','o','u' ,在子字符串中都恰好出现了 ...

  6. intern()方法的使用

    intern() intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象, 否则将其添加到常量池并返回常量池中的引用. ...

  7. element-ui 的 单选按钮(Radio) 怎么取消文本显示?

    方法一:<el-radio class="radio" v-model="radio" :label="1"> </el- ...

  8. JavaScript语法记要

    JavaScript语法记要 1.JS代码忽略缩进和换行 2.JS六种数据类型 String // 字符串 Number // 数值 Boolean // 布尔值 null // 空值 undefin ...

  9. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  10. swagger2 接口文档

    1,maven: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...