gcc "-I"(大写i)、 "-l"(小写l)、"-L"(大写L)的使用小结

我们在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 文件夹。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值