美文网首页
Head First C学习之动态库于静态库

Head First C学习之动态库于静态库

作者: 燚随风 | 来源:发表于2016-04-01 17:08 被阅读44次

函数库分为静态库和动态库两种。

静态库在程序编译时会被连接目标代码中,程序运行时将不再需要该静态库
这类库的名字一般是libxxx.a
动态库在程序编译时会被连接目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
这类库的名字一般是libxxx.so

静态库的创建

一、#include <>代表标准头文件,

只要头文件在标准目录中

/usr/local/include //第三方库的头文件,编译器会先检查这个。 
/usr/include            //操作系统的头文件

二、#include ""为本地头文件编译程序

三、共享.h都文件

  • 1、把头文件放到标准目录中。
  • 2、include语句中使用完整路径。
  • 3、用gcc -I选项指定头文件目录。

四、nm命令

nm命令.jpg

五、ar存档命令

ar命令.jpg
  • 所有.a文件都是libXXX.a形式命名的。
  • 存档是静态库(static library)。
  • .a文件保存在标准目录中。
  • 也可以放到自己的库目录中。
  • `ar -t<文件名>命令会列出存档中的目标文件。
  • ar -x<文件名.a> <文件名.o>会从存档中取出想要的目标文件。

六、利用库文档编译其他程序

gcc_ar.jpg

如果使用的是自建的库;

gcc test_code.c -L/my_lib -lhfsecurity -o test_code

动态库的创建

动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
都是由*.o目标文件生成。

一、创建目标代码

fPIC.jpg
在创建hfcal.o时,多加了一盒标志-fPIC。它告诉gcc创建位子无关的代码。事实上大多系统不需要加这个选着。

位置无关代码:计算机把它加载到存储器的哪个位置都可以运行的代码。

二、不同平台的动态库

  • Windows中动态库通常叫动态链接库,后缀名是.dll
  • LinuxUnix上叫共享目标文件,后缀名.so
  • 而在MAC上,它们叫动态库,后缀名.dylib
  • 尽管后缀名不同,但是创建它们的方法相同。
    gcc-shared.jpg
    -shared选项告诉gcc你想把.o文件转化为动态库。
    假设在linux中创建一个叫libhfacl.so的库,,那么libgfcal.so就会记住它的苦命叫hfcal。
    注意:
  • 一旦用了某个名字编译了库,就不能载修改文件名了,若想从命名库,就必须用心的名字重新编译一次。
  • 一些老的MAC系统上没有-shared,可以用-dynamiclib代替。

编译程序是实用的命令和静态存档是一样的。

不同平台运行时,会有一些差异性,就是配置动态库的环境变量。

相关文章

  • Head First C学习之动态库于静态库

    函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。这类库的名字...

  • 动态库 静态库

    C++静态库与动态库

  • 静态库与动态库区别

    本文动态库、静态库区别部分转载自C++静态库与动态库 程序的编译过程如上图 静态库: 之所以成为【静态库】,是因为...

  • iOS静态库及动态库

    2018-06-19 浅析静态库链接原理编译原理以及什么是静态库和动态库 转之: iOS 静态库和动态库(库详解)...

  • Head First C 学习之K&R C 、ANSI

    @(C语言)[学习笔记, Head First C, C语言]起于Head First C 第2页 下, 书中简介...

  • Objective-C库文件使用

    静态库 VS 动态库 静态库:静态库在Objective-C里面以.a或者.framework作为后缀,目前开发者...

  • Java 调用本地代码库

    什么是动态链接库 C/C++编译出来的库有两种:静态链接库和动态链接库。 静态库后缀名在Windows上是.lib...

  • QT中dll的生成及使用

    C++中的库分为三种:静态库、动态库和导入库 1、静态库:     静态库扩展名为.lib,静态链接(即代码会直接...

  • iOS 静态库和动态库的制作

    静态库和动态库 一、静态库和动态库的存在形式 静态库: .a 和 .framework 动态库: .dylib 和...

  • Swift 静态库调研

    一、关于库的背景知识1、静态库和动态库静态库动态库系统动态库Cocoa Touch Framework静态库 v....

网友评论

      本文标题:Head First C学习之动态库于静态库

      本文链接:https://www.haomeiwen.com/subject/jqeylttx.html