介绍

gcc   - 参数

-I ( i 的大写)  :指定头文件路径(相对路径或觉得路径,建议相对路径)

-i               :指定头文件名字 (一般不使用,而是直接放在**.c 文件中通过#include<***.h> 添加)

-L              :指定连接的动态库或者静态库路径(相对路径或觉得路径,建议相对路径)

-l (L的小写):指定需要链接的库的名字(链接 libc.a :-lc       链接动态库:libc.so  : -lc   注意:-l后面直接添加库名省区“lib”和“.so”或“.a”  )

问题:

问题1:-l(L的小写)链接的到底是动态库还是静态库

答案:如果链接路径下同时有 .so 和 .a  那优先链接 .so

问题2:如果路径下同时有静态库和动态库如何链接静态库

答案:使用显示链接,       gcc      -l:lib***.a    (将静态库的名字显示写出来)

或者在 gcc 编译的时候 加入参数 -static -lXXX, 则可以添加路径下面的静态库。

验证方法:

可以通过 ldd 命令查看生成的 目标文件链接的库,使用方法: ldd  ***.o

参考:

1.https://blog.csdn.net/youqika/article/details/54617525

2.https://www.cnblogs.com/benio/archive/2010/10/25/1860394.html

3.gcc生成静态库和动态库:https://www.cnblogs.com/woainilsr/archive/2013/07/10/3182891.html

4.静态库和动态库链接路径顺序:https://blog.csdn.net/qq_21034239/article/details/54382311

静态库链接时搜索路径顺序:

  • 1. ld会去找GCC命令中的参数-L
  • 2.再找gcc的环境变量LIBRARY_PATH (用法:LIBRARY_PATH= path)
  • 3.再找内定目录 /lib    /usr/lib    /usr/local/lib这是当初compile gcc时写在程序内的 (因系统版本而定  :/lib64)

动态库链接时、执行时搜索路径顺序:

  • 1. 去找GCC命令中的参数-L
  • 2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径 (LD_LIBRARY_PATH=path)
  • 3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径 (修改/etc/ld.so.conf文件,将路径添加进去,运行/sbin/ldconfig
  • 4.默认的动态库搜索路径/lib(因系统版本而定:/lib64)
  • 5.默认的动态库搜索路径/usr/lib(因系统版本而定)

头文件搜索路径:

  • 1. 去 -I( i 的大写 ) 指定的路径
  • 2. 源程序头(#include "")文件中指定的路径
  • 3.  /usr/include
  • 4.  /usr/local/include

有关环境变量:

  • LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
  • LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

(这部分来源:https://blog.csdn.net/qq_21034239/article/details/54382311 ,并修改)

5.Linux中(.a/.la/.so/.o) 区别:http://www.cnblogs.com/findumars/p/5421910.html

gcc -I -i -L -l 参数区别 / -l(静态库/动态库)相关推荐

  1. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...

  2. Ubuntu下makefile及gcc生成静态库动态库的简单使用举例

    环境:Ubuntu-13.10  32位(虚拟机).gcc4.8.1 首先创建一个test_makefile_gcc文件夹,此test_makefile_gcc文件夹下包括:src文件夹用于存放源文件 ...

  3. java静态和动态的区别_Java 静态与动态的区别

    Java 静态与动态的区别 1.静态的属性是类共同拥有的,而动态的属性是类各对象独立拥有的. 2.静态上内存空间上是固定的,动态中内存空间在各个附属类里面分配. 3.分配顺序不同,先分配静态对象的空间 ...

  4. lacp静态和动态区别_lacp静态与动态区别

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. lacp静态与动态区别是: 1.用户权限不同.动态lacp汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态lacp汇聚 ...

  5. 动态lacp和静态lacp区别_lacp静态与动态区别

    lacp静态与动态区别是: 1.用户权限不同.动态lacp汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态lacp汇聚中的成员端口.静态lacp汇聚由用户手工配置,不允许系统自动添加或删除 ...

  6. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  7. C++静态库与动态库的区别?

    C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  8. 编译c语言动态库,使用gcc、g++编译C/C++源程序,静态库和动态库创建方式

    后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序: 后缀为.cpp的,两者都会认为是c++程序. 注意,虽然c++是c的超集,但是两者对语法的要求是有区别的. 编译阶段,g++会调用gc ...

  9. gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例

    gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例 文章目录 gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例 一.用gcc生成静态库和动态库 ( ...

最新文章

  1. BZOJ3522 [Poi2014]Hotel 【树形dp】
  2. PowerDesigner与SQL Server相连
  3. java中的equals拿什么鞋的_Java中==和equals方法
  4. 【刷题记录】排列dp
  5. 【转】Magento2 安装系列一 虚拟机、CentOS7 安装
  6. 深入理解Netscaler INat
  7. 全网最全Spring面试题之高级篇整理总结(二)(共16题,附超详细解答)
  8. java密钥长度受限制问题解决
  9. 基于Springboot的医院药品管理系统的设计与实现.zip(论文+项目源码)
  10. 2020mysql下载教程
  11. HTML5+CSS大作业——学生个人博客(5页) 大学生个人博客网页作品 网页设计作业模板 学生网页制作源代码下载
  12. js实现软键盘(兼容所有浏览器)
  13. 标准之争:影响 IPv6 部署的经济学因素
  14. 嵌入式Linux应用开发(四)——GPIO接口
  15. Excel长串数字显示异常,如2E+13
  16. 基于vue3+ts+scss的后台管理系统(一)
  17. Python-Django毕业设计钓鱼爱好者交流平台(程序+Lw)
  18. 华为手机android7价格,【华为手机大全】华为手机报价及图片大全-列表版-ZOL中关村在线...
  19. Seabron作图:
  20. html 无缝拼接,用jQuery写一个无缝衔接轮播图,超精简又详细

热门文章

  1. 02 数学软件与建模---MATLAB入门
  2. Ray 分布式简单教程(2)
  3. Henry前端笔记之 Date对象详解
  4. 如何利用python在一个文档里xie'ru_如何用python在Windows系统下,生成UNIX格式文件...
  5. mysql 整理 是什么意思_MySQL问答整理
  6. Python笔记(二十)_多态、组合
  7. QScrollArea滚动条区域
  8. Pinterest瀑布流+UDC
  9. c#截取字符串中指定字符串后到结尾
  10. 挨踢部落故事汇(20):Android程序员的十大转型之路