zoukankan      html  css  js  c++  java
  • 第6课-函数库设计

    1.Linux下的应用程序所需要的外部函数可以由函数可和系统调用提供。
    2.函数库是处于用户态的,由工作人员编写的函数的集合,而系统调用是由Linux内核实现的。
    3.函数库分为静态和动态,按照链接方式划分的。动态函数库比静态节约空间。使用静态函数库以后应用程序最终会包含自身和函数库,在内存中运行的时候就会有多个函数可的拷贝,导致在空间上的浪费。而动态函数库则在内存中只有一个拷贝,供多个都会使用到的程序使用。
    4.Linux使用的函数库一般都是在/lib或者在/usr/lib,以*.so*命名的,是动态函数库,以*.a命名的是静态函数库。
    5.Linux进行链接默认使用动态函数库,要使用静态函数库,必须显示指明-static选项。
    6.可以使用readelf -d 命令查看程序所使用的函数库。
    7.-l表示查找某一个库,如-lc是查找c库,而静态c库一般都以libc.a命名。
    8. 有些Linux发行版默认不提供某些静态库。
    9.制作静态函数库
    (1)编写好你要制作库的函数,写在.c文件
    (2)编译.c文件,使用-c选项,只编译不链接,生成中间.o文件
    (3)使用ar命令将中间.o文件打包成库文件(.a)
    (4)将生成的库文件复制到/usr/lib目录下
    (5)要使用自己的库函数,在编译的时候要显示的指明,用-l(name)选项,Linux只使用c库。

    10.库文件的命名:
    libname.a
    libname.so
    11.动态函数库设计(共享库)。使用的时同样要显示指定引用的库。-lname选项、

    我看完了 静态和动态函数库的设计 这部分的视频。有一点不明白。
    我先说一下我的理解:
    函数库分为动态和静态两种,更直观一点来说,在文件上分为.a和 .so 。
    我现在写了一个函数——add.c,功能很简单,就是实现两个整形数据的加法。
    这个函数我可以把它编译成动态函数库,也可以把它编译成静态函数库,分别命名为libmyadd.so和libmyadd.a.
    我现在只想使用动态库函数,所以我将上面的libmyadd.so放到/usr/lib中。
    我又写了一个文件——main.c,在该文件中将会调用上面的add功能。
    在编译main.c时,
    如果使用命令  gcc main.c -lmyadd -o test 进行编译,很显然,它会默认动态链接libmyadd.so,生成的目标文件test会很小。
    如果使用命令  gcc -static main.c -lmyadd -o test 进行编译呢,动态库文件libmyadd.so能否以静态的方式编译进目标文件test中呢?
    同理,我如果只把静态库文件libmyadd.a放入 /usr/lib中,但是编译时却使用默认的动态链接方式,是否能成功呢?
    再者,我把上面的两个动态和静态库文件都放在/usr/lib中,那么,执行命令gcc main.c -lmyadd -o test 时,编译器默认会使用那个库文件呢?
    加上static参数之后呢?
    总之,对于动态链接、静态链接、动态库文件、静态库文件 之间的对应关系不是很明白。

  • 相关阅读:
    Lock wait timeout exceeded; try restarting transaction
    数据库三大范式
    数据库内联和外联
    [PHP相关教程] laravel5.1学习手册[一]基本开发环境配置
    轻松实现Ecshop商城多语言切换
    php 异步提交表单
    [解决方法] php大form用post方式传递数据过多被截取的问题
    HTML5日期输入类型(date)
    PHP 数字转化为自定义长度的字符串[前插后入]
    网站应用微信登录开发指南
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4432995.html
Copyright © 2011-2022 走看看