这一阵子的工作用到了linux,也用到了linux的静态库和动态库。正好对这一块儿一直不明白,趁此机会学习了一下。以下是笔记。先说一说linux下静态库的生成和使用方法。

An archive (or static library) is simply a collection of object files stored as a single file.(An archive is roughly the equivalent of a Windows .LIB file.) When you provide an archive to the linker, the linker searches the archive for the object files it needs, extracts them, and links them into your program much as if you had provided those object files directly.

You can create an archive using the ar command.Archive files traditionally use a .a extension rather than the .o extension used by ordinary object files. Here’ s how you would combine test1.o and test2.o into a single libtest.a archive:

% ar cr libtest.a test1.o test2.o

The cr flags tell ar to create the archive.

---摘自《Advanced Linux Programming》

由上面可以看到,linux操作系统中,
1.静态库是一些目标文件(后缀名为.o)的集合体而已。
2.静态库的后缀名是.a,对应于windows操作系统的后缀名为.lib的静态库。
3.可以使用ar命令来创建一个静态库文件。
来看一个实例,根据书中的代码简化的,先看一看可以编译成库文件的源文件中的代码:

  1. /* test.c */
  2. int f()
  3. {
  4. return 3;
  5. }

代码非常简单,只有一句话。我们敲入如下命令:
gcc –c test.c
ar cr libtest.a test.o
会在当前目录下生成一个libtest.a静态库文件。-c表示只编译,不链接。再来看一看如何使用这个库。如下代码:

  1. /* app.c */
  2. #include <stdio.h>
  3. extern int f();
  4. int main()
  5. {
  6. printf(“return value is %d\n”,f());
  7. return 0;
  8. }

敲入如下命令:
gcc –c app.c
gcc -o app app.o -L. –ltest
敲命令的时候要记得将libtest.a文件和生成的app.o文件放在同一个目录(即当前目录)下。这样,敲入命令后,会在当前目录下生成一个名为app的可执行文件。-o表示指定输出文件名。执行一下./app,可以看一看结果:

这就是生成linux下面静态库的简单用法了。

Linux环境下静态库的生成和使用 (.a文件)相关推荐

  1. 在Linux环境下使用gfortran编译器生成fortran语言的.so共享对象文件 并使用JNA调用 带参方法

    在Linux环境下使用gfortran编译器生成fortran语言的.so共享对象文件 并使用JNA调用 带参方法 1 致谢和参考文章 1.1 致谢 1.2 参考文章 2 环境介绍 3 整体思路 4 ...

  2. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...

    Linux下动态库文件的扩展名为".so"(Shared Object).按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号).这样,线程函数库被称作l ...

  3. linux 动态库 软链接,Linux操作系统下动态库的生成及链接方法

    下动态库文件的扩展名为".so"(Shared Object).按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号).这样,线程函数库被称作 libth ...

  4. linux环境下python 库模块安装

    今天要在一台线上服务器上部署一个python脚本,其中用到了MySQLdb,各种尝试下载源码(各种依赖库的相互不兼容),get/yum(这linux真纯净啊  这俩都没法用)安装,wget下载rpm包 ...

  5. 结合xxx.cpp:(.text+0x55):对‘xxx’未定义的引用剖析Linux环境下动态库.so文件

    操作系统:Linux系统 场景:g++编译,连接动态库文件时 错误示例(中文): /tmp/cccgNNpb.o:在函数'main'中: test.cpp:(.text+0x55):对'myprint ...

  6. linux环境下pandas库的安装,linux安装pandas

    1.1.Numba的约5分钟指南 Numba是Python的即时编译器,它最适用于使用NumPy数组和函数以及循环的代码.使用Numba的最常用方法是通过其装饰器集合,可以应用于您的函数来指示Numb ...

  7. Linux环境下利用句柄恢复Oracle误删除的数据文件

    在误删除Oracle的数据文件后,如果未关闭数据库,文件句柄还没有释放,且被删除的数据文件占用的磁盘块未被复写,则可以利用句柄的方式来恢复数据文件.下面模拟恢复过程. (一)环境 OS版本:redha ...

  8. linux环境下批量删除SVN未加入版本控制的文件

    svn st | grep '^?' | sed -n 's/^?[ \t]*//p' | xargs rm -rf 或者是: svn st | grep '^?' | awk '{print $2} ...

  9. 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...

    一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要i ...

最新文章

  1. Python图像处理库PIL从入门到精通
  2. 墙裂推荐!顶级赛事CCF BDCI即将开赛!
  3. ThinkPHP 3.2公共类库、应用类库ThinkPHP/Library讲解
  4. 福步怎么自定义头像_苹果手机怎么截屏 苹果手机截屏方法有几种?原来还可以这么操作...
  5. spring-security学习笔记--配置文件
  6. modbus 台达a2_驱控智造未来 台达重磅发布多款工业自动化新品
  7. 获取html滚动条位置,pc和移动端获取滚动条的位置
  8. 关于jQuery引用版本问题
  9. python编辑器中文字体倒立的_matplotlib的安装和允许中文及几种字体
  10. 分子排列不同会导致_武汉理工《Matter》:构筑晶体内跨尺度分子筛单晶反应器...
  11. window 右击菜单启动 nodejs app
  12. Emacs代码补全之ycmd
  13. 那些年 我们一起追过的DIY三大件
  14. php如何采集有验证码的网页信息,网页数据采集出现验证码的解决方法 - 八爪鱼采集器...
  15. 苹果Mac安装win10双系统
  16. DW1000学习之路(三)--------DW1000的中断处理问题
  17. ios: Undefined symbols
  18. Hibernate复杂查询——多参数分页 in()查询(多参数、分页、in())
  19. 极线几何关系、极点、极线,三维重构,k-d树的特征匹配方法
  20. R 多变量数据预处理_R语言常用统计方法包+机器学习包(名称、简介)

热门文章

  1. ModelSim 使用笔记1
  2. 抽象类、抽象方法与代码块
  3. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  4. 无法删除DLL文件解决方法(转)
  5. js 设备条形码字体_蚌埠食品袋激光打码机设备-青岛博泰格睿特
  6. [Python图像识别] 四十九.图像生成之什么是生成对抗网络GAN?基础原理和代码普及
  7. 2020年第十一届蓝桥杯 - 省赛 - CC++大学A组 - B.既约分数
  8. Python设计模式之外观模式实例讲解
  9. 人工智能实践之旅 —— 简单说说主要内容和安排
  10. Netty实战 IM即时通讯系统(四)服务端启动流程