day02,静态库和动态库
一、首先我们来看一下什么是静态库和动态库,在这之前我们来看一下编译成可执行文件的过程:
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,静态库和动态库的更多相关文章
- C++ 系列:静态库与动态库
转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...
- C++静态库与动态库
C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- Makefile中静态库,动态库的创建和使用以及解压缩命令
应用层通过操作文件操控硬件 使用制作好的工具链: 刚开始学习时,用一些已经制作好的工具链,使用以下命令解压到gcc-3.4.5-glibc-2.3.6目录 cd /work/tools tar xjf ...
- VS中Debug和Realease、及静态库和动态库的区别整理(转)
原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...
- Linux下C++静态库、动态库的制作与使用
参考博文:C++静态库与动态库 >> 静态库 1. 静态库的制作 a) 编辑 name.cpp 和name.h文件 b) $g++ -c name.cpp //注意带参数-c,否则直接编译 ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
- VS中Debug和Realease、及静态库和动态库的区别整理
一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
随机推荐
- mybatis高级应用(四)_逆向工程
1 逆向工程 源码请参考:云盘下工程 generatorSqlmapCustom 1.1 什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单 ...
- MySQL学习(3)
一 SQL语句 1. 数据库级别(*) 显示全部数据库:show databases; 创建数据库:create database '数据库名字’; 使用数据库:use '数据库名字'; 删除数据库: ...
- 滑动窗口-Substring Search Problem
2018-07-18 11:19:19 一.Minimum Window Substring 问题描述: 问题求解: public String minWindow(String s, String ...
- 采用vue编写的功能强大的swagger-ui页面
think-swagger-ui-vuele swagger-ui有非常多的版本,觉得不太好用,用postman,每个接口都要自己进行录入.所以在基于think-vuele进行了swagger格式js ...
- 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- 运行docker大致流程
平时部署测试环境使用jenkins将代码打包成docker镜像部署在rancher中,闲下来研究了一下docker的大致流程,自己画了一个流程图
- WePY框架 input,checkbox-group,radio-group等change 一般处理方法
布局搞定了,接下来就是数据处理方面了 form表单中常用标签,绑定change方法: 方法的具体实现 根据打印出来e的结果可以看到,e指代当前标签对象,包含属性方法等 从detail中可以获取多选框选 ...
- jQuery操作DOM的相关方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- coding++ :Layui-监听事件
在使用layui的form表单做验证提交的时候,如果结合vue,或者是三级联动的时候,就需要做事件监听了. 具体语法: form.on('event(过滤器值)', callback); 可以用于监听 ...
- D. Fight with Monsters
D. Fight with Monsters time limit per test 1 second memory limit per test 256 megabytes input standa ...