我们在Unix/Linux系统编程时,会涉及到库、 头文件等文件的引用,这个在IDE中,IDE软件界面中提供了配置接口,比如IAR中的预编译,画面如下:

上面的红框的意思就是告诉 编译器,要将上面的目录包含,一起编译,Keil和其他的IDE中也有类似的操作。

在Unix/Linux下,是信奉“自己动手,丰衣足食”的理念的,这些库、头文件引用包含的操作,都是需要自己写代码来 实现的。假设我们的交叉编译环境就是gcc,我们先来概括下"-I"(大写i)、 "-l"(小写l)、"-L"(大写L) 这3种选项的作用

"-I"(大写i) : 可以理解为 include,是 实现 包含各种头文件的功能。

"-L"(大写L):可以理解为 location ,这个和 "-l"(小写l) 配合使用的,告诉编译器 要引用的“库”所在的位置。

"-l"(小写l):可以理解为 library ,这是后面要跟“库”名字,告诉编译器 要引用的具体“库”名字。

注意:“库”的名字是有标准格式的,一般都是"lib"字符串开头,比如libxxx.so、libxxx.a 等,把库文件名的头"lib"和尾".so"去掉就是这个库的 简称了,这样我们在使用"-l"(小写l)引用库的时候,不用带lib了,而是-lxxx。

还是来举个例子吧,假设我们的应用程序里, 需要使用库文件libmodbus.so,同时还要使用这个库文件的 几个头文件 modbus.h、modbus_rtu.h,而我们的应用程序是 man.c,文件夹结构如下所示

#文件夹、文件       包含内容
lib--------------> libmodbus.so
include----------> modbus.h modbus_rtu.h
main.c

交叉编译环境假设是gcc,那么我们在进行编译时,编译命令如下:

gcc -o AppModbus main.c  -L./lib  -lmodbus -I./include# AppModbus    : 可执行程序,编译结果
# main.c       : 源文件
# -L./lib      :引用的 库 所在位置,即 当前目录下的 lib 文件夹中
# -lmodbus     :引用的 库 名称,即 modbus 库,这个因为 lib中的文件是 libmodbus.so,去掉头尾就是
#                真正的库名字。
# -I./include  :要包含的头文件位置,即 当前目录下的 include 文件夹。

gcc -I(大写i)、 -l(小写l)、-L(大写L)的使用小结相关推荐

  1. 字符串大写字符串转小写js_C ++字符串大写和小写

    字符串大写字符串转小写js In this article, we will dive into the conversion of the input string to Lowercase and ...

  2. php小写字母改成大写,php如何将小写字母转为大写

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  3. linux 下 gcc编译程序时,-I(大写i) 与-L(大写l)-l(小写l) 的作用

    -I(大写i) include头文件非标准库中存在的不是在当前路径文件夹下的,需要将地址用-I(大写)指定 如: gcc test.c -I /home/hello/include -L(大写l) 放 ...

  4. linux编译l和l区别,linux 下 g++编译程序时-I(大写i) 与-L(大写l)-l(小写l) 的作用详解...

    作为一个linux入门级使用者,gcc/g++的简单操作已经用过多次, 但是有时稍微复杂一点的程序就会使用到库.在遇到问题的时候我查了挺多前辈总结的资料,也留个脚本希望对朋友们有个帮助.如果也能处理你 ...

  5. -I (大写i)、-L、-l(小写L) 的使用

    一.案例 目录下有以下文件: main.c #include <stdio.h> #include "sub.h"int main(int argc, char *ar ...

  6. Makefile: 参数-I (大写字母i), -l (小写字母l) 和-L的区别

    在写Makefile的时候,其实并不像写CMakeList.txt那么方便,直接include_directories, target_link_libraries,而且对于这些关键字大小写都是不敏感 ...

  7. 数据结构:假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母

    假设有一个带头结点的单链表L,每个结点值由单个数字.小写字母和大写字母构成.设计一个算法将其拆分成3个带头结点的单链表L1.L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母结点,L3 ...

  8. 解决tex中参考文献出现[S.l.: s.n.]、[S.l.]、 [s.n.]问题

    见: 解决tex中参考文献出现[S.l.: s.n.].[S.l.]. [s.n.]问题_Robot Liu的博客-CSDN博客 问题解决:LaTeX biblatex 参考文献出现 [S.l.]: ...

  9. Leetcode打卡四:将给定的单链表L: L 0→L 1→…→L n-1→L n, 重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→… 要求使用原地算法,并且不改变节点的

    题目: 将给定的单链表L: L 0→L 1→-→L n-1→L n, 重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→- 要求使用原地算法,并且不改变节点的值 例如: 对于给定 ...

  10. ftp上传老是失败 [L] TYPE A [L] 200 Type set to A. [L] MODE Z [L] 200 MODE Z ok. [L] PASV [L] 550 Pa

    [L] TYPE A[L] 200 Type set to A.[L] MODE Z[L] 200 MODE Z ok.[L] PASV[L] 550 Passive mode not allowed ...

最新文章

  1. web站点的欢迎页面
  2. 基于bs4+requests的豆瓣电影爬虫
  3. 300 多行代码搞定微信 8.0 的「炸」「裂」特效!
  4. nginx配置错误而导致目录遍历漏洞
  5. Android之自定义View以及画一个时钟
  6. Mac上关于shell使用Python3和C++11声明
  7. 免费mac虚拟机下载 快速安装win系统
  8. Server 2008 R2 AD RMS完整部署:一、用户创建篇
  9. Python 数据结构与算法 —— 常见面试题
  10. 17.Class Preferences
  11. Mac与Windows双系统与虚拟机
  12. 计算机电源大小,常见电脑主板和电源尺寸
  13. 网站建设基本流程,要注意什么?
  14. 深度相机原理揭秘--双目立体视觉
  15. vue代码查重(任意格式文件)
  16. iOS开发:唯一标志符
  17. 【风马一族_php】
  18. 如何在笔试的时候绕开切屏提示
  19. 2021-07-08解决大部分lanzous蓝奏云链接无法打开
  20. php版工行聚合支付和e支付

热门文章

  1. html背景颜色代码格式,html常用背景颜色代码.docx
  2. matlab鼠标截取图像并显示_matlab图像剪裁命令imcrop()
  3. html怎么设置整体右对齐,如何在html中右对齐按钮
  4. 一文搞定卷积神经网络——从原理到应用
  5. python 动态执行 内存变化_深入理解python数组的动态扩容机制以及摊销分析
  6. JustAuth升级到v1.8.1版本,新增AuthState工具类,可自动生成state
  7. 使用管理员权限强制删除文件夹
  8. 移动硬盘只显示盘符,拒绝访问解决方法
  9. 在VM环境下安装iKuai(爱快)软路由——适合小白(最新最全教程)
  10. 芯片测试需要掌握什么软件,芯片测试工程师岗位职责