linux下静态库的制作
在我们编写软件的过程当中,少不了需要使用别人的库函数。因为大家知道,软件是一个协作的工程。作为个人来讲,你不可能一个人完成所有的工作。另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把时间浪费在这些重复的工作上面。
既然说到了库函数,那么一般来说库函数分为两种方式:静态库和动态库。两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中的。怎么理解呢?也就是说,对于最后的执行文件而言,你是否删除静态库无所谓。但是,一旦你删除了动态库,最后的执行文件就玩不转了。
今天我们讨论的问题是静态库。为了显示windows和linux创建静态库之间的差别,我们首先在windows上面利用Visual C++6.0创建一个静态库。源文件的代码很简单,
#include "test.h" int add(int a, int b)
{
return a + b;
}
头文件代码也不难
#ifndef _TEST_H
#define _TEST_H int add(int a, int b);
#endif
如果你需要在windows上面创建一个静态库,那么你需要进行下面的操作,
(1)打开visual C++ 6.0工具,单击【File】-> 【New】->【Projects】
(2)选择【Win32 Static Library】,同时在【Project Name】写上项目名称,在【Location】选择项目保存地址
(3)单击【Ok】,继续单击【Finish】,再单击【Ok】,这样一个静态库工程就创建好了
(4)重新单击【File】->【New】->【Files】,选择【C++ Source Files】,
(5)选中【Add to pproject】,将源文件加入到刚才创建的工程中去,在File中输入文件名+.c后缀
(6)重复4、5的操作,加入一个文件名+.h头文件
(7)分别在头文件和源文件中输入上面的代码,单击F7按钮,即可在Debug目录中生成*.lib静态库文件
那么,在linux下面应该怎么运行呢?其实很简单,两条命令解决,
(1)首先生成*.o文件,输入gcc -c test.c -o test.o
(2)利用ar命令生成静态库,输入ar rc libtest.a test.o
此时如果还有一个hello.c文件使用到了这个静态库,比如说 :
#include <stdio.h>
#include "test.h" int main()
{
printf("%d\n", add(2, 3));
return 0;
}
其实也很简单,输入一个简单的命令就可以生成执行文件了,
(1)首先输入gcc hello.c -o hello ./libtest.a
(2)输入./hello,验证生成的执行文件是否正确
(3)朋友们可以删除libtest.a文件,重新输入./hello,验证执行文件是否可以正常运行
linux下静态库的制作的更多相关文章
- Linux下静态库生成和使用
Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...
- linux下静态库和动态库一些东西
http://www.cnblogs.com/changefuture/archive/2011/12/22/2297460.html Linux 动态链接库和静态库示例 文件预览 文件目录树如下, ...
- linux下静态库和动态库的制作
一.静态库 1.编写.c文件,在其中实现函数源代码,同时制作头文件 2.将.c文件转为.o文件 gcc -c xxx.c -o xxx.o 3.将*.o转换成库文件 a ...
- Linux下静态库和动态库
函数库分为静态库和动态库 动态库(格式为libname.so[.主版本号.次版本号.发行号]).在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入. 静态库是目标文件.a的归档文件(格式为 ...
- linux下静态库的生成和使用
一.静态库概念 1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. 2.标准系统库可在目录/usr ...
- Windows下静态库的制作与使用
参考 静态链接 VS 动态链接 静态库 VS 动态库 实验环境 OS:Windows10 企业版 IDE:Visual Studio 2017旗舰版 前言 静态链接库与动态链接库都是共享代码的方式,如 ...
- Windows下静态库与动态库的创建与使用
Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...
- 查看Linux下*.a库文件中文件、函数、变量
查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...
- linux上静态库链接的有关问题
求大神,linux下静态库链接的问题有两个文件和一个库,a.c, b.c,libh.a,其中b.c里面会有调用libh.a的函数func1,现在将a.c, b.c,libh.a编译链接生成可执行文件, ...
随机推荐
- 雪花算法(SnowFlake)Java实现
分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 算法原理 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1bit,不用,因为二 ...
- [刘阳Java]_Spring对Dao的支持_第10讲
Spring框架优秀就是在于MVC开发的时候一旦需要对底层的数据库操作,它可以很好的支持JDBC技术,还有现在主流的ORM框架(Hibernate, MyBatis)技术. 重点先介绍Spring对J ...
- 微信小程序云开发-云函数-数据库和云函数获取数据的区别
一.数据库获取数据 1.1 数据库获取数据的写法 在本地创建的页面js文件中写代码 1.2 数据库获取数据返回数据限制20条 数据库获取数据,每次返回20条数据(数据库有108条数据) 1.3 数据库 ...
- synchronized 优化手段之锁膨胀机制!
synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized.然而这个情况在 JDK 1.6 时就发生了改变,JDK 1.6 ...
- PHP imap 远程命令执行漏洞(CVE-2018-19518)
影响版本 PHP:5.6.38 系统:Debian/ubuntu 构造数据包 成功执行命令echo '1234567890'>/tmp/test0001
- QT经验(一)——按钮长按事件分析
引言 最近在做qt项目,需要对button按钮添加一个长按事件(比如点击按钮,开始运动.松开按钮,运动停止).查了些许资料,(差点误把QPushButton的press信号和长按事件混淆)在此记录一下 ...
- Qt-可编辑的ListView
新建一个QML项目, main.cpp不动如下: #include <QGuiApplication> #include <QQmlApplicationEngine> int ...
- 安装Linux的步骤 包含linux下安装jdk,及mysql
https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 镜像下载网址,4G 左右. 安装VMware 15版本 一路下一步, ...
- java环境的配置——实现win10下双击直接运行jar文件
java环境的配置--实现win10下双击直接运行jar文件 在渗透测试的过程中很多工具的安装和使用需要java环境,下面我来介绍一下java环境配置的超详细步骤(包含怎样实现win10下双击直接运行 ...
- Docker小白到实战之开篇概述
前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...