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

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. 李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪

    6-PACK: Category-level 6D Pose Tracker with Anchor-Based Keypoints 论文地址: 6-PACK: Category-level 6D P ...

  2. Linux网络学习笔记(二):域名解析(DNS)——以 CoreDNS 为例

    个人笔记,观点不一定正确. 适合对 Kubernetes 有一定了解的同学. 前言 最近一直在学习 Kubernetes,但是手头没有个自有域名,要测试 ingress 就比较麻烦,每次都是手动改 h ...

  3. HDU-4252 A Famous City(单调栈)

    最后更新于2019.1.23 A Famous City ?戳这里可以前往原题 Problem Description After Mr. B arrived in Warsaw, he was sh ...

  4. Hive视图如何创建、特点及应用场景

    Hive视图特点 View是逻辑存在,Hive暂不支持物化视图(1.0.3) View只读,不支持LOAD/INSERT/ALTER.需要改变View定义,可以是用Alter View View内可能 ...

  5. cin.getline()的用法和坑

    cin.getline()的用法和坑 cin.getline大致原型:**istream& getline (char* s, streamsize n, char delim='\n');* ...

  6. Transformers 简介(下)

    作者|huggingface 编译|VK 来源|Github Transformers是TensorFlow 2.0和PyTorch的最新自然语言处理库 Transformers(以前称为pytorc ...

  7. 使用FME将CAD中块参照数据转换为shp数据

    暴露出需要导出的字段值,首先在数据查看器中看看CAD中各个图层分别有哪些隐含的字段. CAD快参照中含有多个部分,需要将点按照原始编码聚合成一个点. 属性字段创建,并按照属性字段一一对应CAD中的字段 ...

  8. 开源APP

    仿微信 https://github.com/zhengwenming/WeChat 电台韵律 https://github.com/DaMingShen 运动App https://github.c ...

  9. [bzoj4977]跳伞求生<贪心>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4977 这是八月月赛的一道题,月赛的时候和同学讨论了一下,最后由一位叫二哥的大佬率先AC,用 ...

  10. js中写laravel模板blade语法和PHP逻辑解决方法

    在js中是否能够执行blade的语法?或者说在js中能否处理PHP逻辑呢? 答案是,当然的 下面来看需求:在提交表单,完成入库操作后,使用 return redirect(route('admin.u ...