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

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. CSS导入方式和六种选择器

    1.css的导入方式 1.1 行内嵌式 1.2 内部方式 1.2.1含义: css代码写在<head>的<style>标签中 1.2.2 优点 方便在同页面中修改样式 1.2. ...

  2. 用c写的简单的日历(学习模块划分)

    简单日历 ​ 主要目的是学习函数模块划分,成品大概是这样,加了一些花里胡哨的东西(/▽\) ​ 分三个模块,主函数.c 显示.c 计算.c 与.h 文件 有两种实现方式,区别在于是否以数组在模块之间传 ...

  3. PAT-B 1005. 继续(3n+1)猜想 (25) c++

    1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...

  4. Tensorflow 介绍和安装

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:AI小昕 本系列教程将手把手带您从零开始学习Tensorfl ...

  5. coding++:java—提取Html文本字符串中的内容

    package com.tree.ztree_demo; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...

  6. Python python lamda 表达式

    '''关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 用匿名函数有个好处,因为函数没有名字,不必担心 ...

  7. C++ STL模板和标准模板库

    一.函数模板 #include<iostream> #include<string> using namespace std; template<class T> ...

  8. 关于获取tableView中cell数据的处理

    前言           最近在做一个项目的时候遇到了这么一个问题,就是tableview作为一个表单,每一行cell都需要填充一个数据填充完成后再返回到table页面,最后进行总的提交.   解决 ...

  9. PostgreSql 自定义函数:批量调整某个字段长度

    CREATE or replace FUNCTION alterColumn(cloumnName VARCHAR(32), out v_retcode text)AS$BODY$ declare r ...

  10. 使用Markdown编辑总结

    Markdown是轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档. Markdown可以导出HTML .Word.图像.PDF.Epub 等多种格式的文档. 后缀为.md或者.markdo ...