gcc库链接
转载于https://blog.csdn.net/zhangdaisylove/article/details/45721667
1.库的分类
库有静态库和动态库,linux下静态库为.a,动态库为.so。windows下静态库为.lib,动态库为.dll。
静态库是在编译的链接阶段链接嵌入到程序中。因此链接了静态库的程序之后与静态库没有了关系,你如果更新了静态库,使用静态库的程序需要重新链接。
动态库在在运行阶段加载的,不会链接到使用动态库的程序中。有点是一旦修改了动态库,所有使用动态库的程序都会自动加载,无需再次编译。
2.库的生成
下面命令在linux环境下执行,以test.c举例
动态库的生成
gcc -share test.c -o libtest.so
静态库的生成
由于静态库是在链接阶段链接的,因此静态库实际上就是编译阶段的.o目标文件的归档文件
gcc -c test.c会生成test.o
ar -r libtest.a test.o
可以将多个.o文件打包到一个库中
3.库的加载
gcc默认会在/lib 和/user/lib下查找库
比如test.c会使用到加密库中的函数
gcc test.c -lcrypto -o test
gcc会自动到/lib和/usr/lib路径下查找libcrypto.a或者libcrypto.so
当库不在/lib和 /usr/lib路径下时,需要手动指定库链接
可以使用-L,比如在当前路径下查找库
gcc test.c -L. -lcrypto -o test
另外程序链接库时如果没有使用-static选项,一般会优先使用动态库。
要加载静态库需要使用-static选项
gcc test.c -lcrypto -static -o teststatic
明显可以看到teststatic比test要大很多。
因为静态库会链接到程序中。
gcc库链接的更多相关文章
- gcc/g++链接时.o文件及库的顺序问题
折腾gcc/g++链接时.o文件及库的顺序问题 链接静态库的顺序问题 GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结
- GCC同时使用静态库和动态库链接
一 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库 ...
- CentOS 6.5(64bit)安装GCC4.8.2+Qt5.2.1(替换GCC的链接库)
截至目前,Qt的最新版本为5.2.1,CentOS的版本为6.5,GCC的版本为4.8.2,经过一番尝试,终于将Qt开发环境安装到了CentOS(64 bit)中,整个过程中有几个需要注意的地方,在这 ...
- gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)
最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...
- 折腾gcc/g++链接时.o文件及库的顺序问题(转)
转自: http://www.cnblogs.com/OCaml/archive/2012/06/18/2554086.html#sec-1-1 折腾gcc/g++链接时.o文件及库的顺序问题 Tab ...
- 程序中引入库文件的头文件 编译时并不需要显示的用gcc去链接他的库文件 why?
拿一个苹果系统下的c文件为例: testArr.c #include <stdio.h> int main() { , , , , }; printf(]); } 当我们编译的时候 一般 ...
- Keil5.15使用GCC编译器链接.a库文件
我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设 ...
- mingw qt(可以去掉mingwm10.dll、libgcc_s_dw2-1.dll、libstdc++-6.dll的依赖,mingw默认都是动态链接gcc的库而TDM是静态链接gcc库,tdm版本更好用。用aspack压缩没有问题。qt本身不使用异常处理)good
原文地址:mingw qt作者:孙1东 不使用Qt SDK,使用mingw编译qt源代码所遇问题及解决方法: configure -fast -release -no-exceptions -no-r ...
- 折腾gcc/g++链接时.o文件及库的顺序问题
gcc/g++链接时.o文件以及库的顺序问题 1 写在前面 最近换了xubuntu12.4,把原来的项目co出来编译的时候报"undefined reference to".猜测是 ...
随机推荐
- (原创)UML要点总结
今天我们总结要点: 我们就从这张图慢慢讲. 一.类图部分 基础: 类图→长方形表示.类名在最上栏,下面是数据,第三栏是方法.其存在两种关系:关联和泛化 属性: 全形: 可见性 名:类型 重 ...
- Zuul过滤器
1.Zuul过滤器生命周期Zuul大部分功能都是通过过滤器来实现的,Zuul定义了4种标准的过滤器类型,这些过滤器类型对应于请求的典型生命周期.a.pre: 这种过滤器在请求被路由之前调用.可利用这种 ...
- 第4章 Selenium2-java WebDriver API (三)
4.12 上传文件 4.12.1 sendKeys实现上传 html <html> <head> </head> <body> <div ...
- vuejs深入浅出—基础篇
一.从HelloWorld说起 任何语言的都是从Hello World开始的,VueJs也不例外,直接上代码: <script src="https://unpkg.com/vue/d ...
- JavaWeb学习 (十三)————JSP
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- U3D Time类
Time.time 表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算. Time.timeSinceLevelLoad 表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止. Tim ...
- C# GDI+编程之绘图
在了解绘图之前,我们先讲几个预备知识 一.坐标系 坐标系是图形设计的基础.GDI+使用三个坐标空间:世界.页面和设备,其中,世界坐标是用于建立特殊图形世界模型的坐标系,也是在.NET Framewor ...
- 如何参与linux内核开发
如何参与linux 内核开发 如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维 ...
- babel-polyfill的引用和使用
前两天一个首页项目,想用vue玩耍一下,就用vue-cli搭建了一套vue的开发框架 完成开发.联调和上线后,问题来了 chrome.ff浏览器下都能正常显示的页面,在百度浏览器下愣就显示不出来了 我 ...
- 8.中断按键驱动程序之poll机制(详解)
本节继续在上一节中断按键程序里改进,添加poll机制. 那么我们为什么还需要poll机制呢.之前的测试程序是这样: ) { read(fd, &key_val, ); printf(" ...