因为是别的论坛,不能直接转载,自己在这里再粘贴一下——
转载网址:https://www.2cto.com/kf/201711/699202.html

关于动态库与静态库的作用这里就不在详细赘述了,重点说一下如何编译动态库与静态库及使用,一些大型的程序一般拥有着良好的架构,各个功能模块之间能够相互协调工作,达到预期的效果,但有的程序并不是所有的源码都是自己编写,特别像是用到芯片厂商的提供的库;能够把这些融合起来的就是需要提供的库;

原料:test1.c test2.cmain.c

(详细的代码不再详细列出来,大家都是开发者,都希望用最短的时间找到想找的东西,而不是浪费太多的时间在细枝末节上)

1.如何编译动态库

gcc test1.ctest2.c -shared -fPIC -o libtest.so

使用动态库

gcc main.c -L.-ltest -o a.out

(

-L : 表示需要库的路径

-l:表示需要库的名称,如libtest.so,名称则为test

)

(ps:执行a.out时有可能提示找不到libtest.so文件,这时需要把库文件放入到/lib等目录下,或者添加环境变量LD_LIBRARY_PATH,包含有库文件的路径即可)

2.如何编译静态库

gcc -c test1.ctest2.c

ar -r libtest.atest1.o test2.o

使用静态库

gcc main.c-static -L. -ltest -o a.out

(

-static:可强制编译时使用静态库,如果不使用这个参数,而静态库与动态库同名的话,会优先使用动态库

)

3.静态库与动态库

在可执行程序执行条件上,使用静态库编译时,生成的执行文件就不再依赖.a静态库文件,而使用动态库编译的执行文件必须包含.so库文件才能运行;

在可执行程序的执行速度上,静态编译的文件会优于动态编译(毕竟静态编译把库文件的代码都编译到执行文件,与动态编译不同在执行动态库中函数时才会去路径下的动态库中寻找链接);

在可执行程序的大小上,静态编译后的文件大小比动态编译的文件大很多;如果对内存要求较高的可选择用动态编译,虽然会慢一点;

在修改库之后,静态编译的文件需要再把静态库和原main.c文件都重新编译才能使用,而动态编译的文件不需要再编译main.c,只需要把新编译的动态库覆盖原来的动态库,再重新运行可执行文件即可生效;相比于编译一个大型工程需要一两小时,动态库的优势就不必多言了;

【转】C语言如何编译动态库与静态库?相关推荐

  1. GCC : 什么是编译?什么是静态库?什么是动态库?怎么生成?优先级?

    本文旨在让大家真正明白C程序如何运行.库文件的种类区别.如何生成.如何使用等! 一.简介: gcc 最初是 "GNU C Compiler" 的简称,只是当作一个 C 语言的编译器 ...

  2. c语言仿ce内存搜索工 源代码_C语言函数库:动态库和静态库优缺点比较

    函数的重要性 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护.我们可以把他们制 ...

  3. C语言函数库:动态库和静态库优缺点比较

    函数的重要性 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护.我们可以把他们制 ...

  4. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

  5. linux centos 编译Lua5.2.0 静态库 动态库

    一 lua下载 lua5.2.0下载地址 :http://download.csdn.net/download/yzf279533105/10109818 二 笔者这里linux环境为centos6. ...

  6. mysql.h 动态编译命令_Linux环境编译动态库和静态库总结

    对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤. 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文 ...

  7. linux系统c++编译连接过程,动态库与静态库

    https://www.cnblogs.com/ucas/p/5778664.html(linux系统c++编译连接过程) http://www.cnblogs.com/skynet/p/337285 ...

  8. Linux环境编译动态库和静态库总结

    首先总结静态库的编译步骤. 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文件 libname.a 为静态库, name 为静态库的名 ...

  9. 动态库、静态库编译测试:含静态库链接动态库、静态库,动态库链接静态库、动态库

    本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等. 太长不看版:请跳至文章最后的总结对比表. 一.内容包含: ①静态库libbb.a依赖静态库libaa. ...

最新文章

  1. 网页制作知识:XHTML 和 DOCTYPE 切换
  2. JSP访问Hadoop 图片存储服务
  3. 在Eclipse新建菜单中添加JSP
  4. 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
  5. 为了让盲人也能追剧,优酷做了哪些努力?
  6. oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图
  7. 虚拟机上搭git服务器,搭建gitlab服务器
  8. 【漫画】兔子,胡萝卜和屎
  9. 【第144期】游戏策划:恭喜@毛毛团入职游戏策划
  10. 升降压电路的设计和分析
  11. 哇嘎显示等待无服务器,vagaa搜索不到资源怎么回事?vagaa哇嘎搜索没反应的解决方法...
  12. 自我救赎,成就希望——小说《致加西亚的信》的读后感范文3400字
  13. 苹果电脑QQ邮件服务器,苹果邮件设置qq邮箱的步骤_苹果电脑自带邮件怎么设置qq邮箱-win7之家...
  14. 【目标检测】CenterNet2代码解读
  15. Django批量修改 get_field_display foreignkey
  16. jq实现checkbox全选中以及获得选中的checkbox的值
  17. 指数函数----e是什么?
  18. 丢人了,我都不知道4D啊
  19. 第一次软件工程课程作业
  20. 一个家最好的投资:陪伴

热门文章

  1. 我妈妈的优点:做事情特别细致
  2. Google上面有自己给你标注好的数据集
  3. 录取率查询和申请结果查询平台分享
  4. 关于 Visual stdio 编译报错:error MSB6006: “CL.exe”已退出
  5. Solaris9 Sparc下安装JDK6.0和tomcat6.0
  6. MaBatis(5)输入/输出映射
  7. JS获取浏览器高度 并赋值给类
  8. RequireJS进阶(一) 转
  9. ***Xcode Interface Builder或Storyboard中可建立那两种连接?
  10. win下修改mysql默认的字符集以防止乱码出现