http://blog.csdn.net/stpeace/article/details/49408665

在本文中, 我们来聊聊gcc中三个常见的参数, 也即-I, -L和-l

一. 先说 -I   (注意是大写的i)

我们先来看简单的程序:

main.c:

[cpp] view plain copy
  1. #include <stdio.h>
  2. #include "add.h"
  3. int main()
  4. {
  5. int a = 1;
  6. int b = 2;
  7. int c = add(a, b);
  8. printf("sum is %d\n", c);
  9. return 0;
  10. }

add.c:

[cpp] view plain copy
  1. int add(int x, int y)
  2. {
  3. return x + y;
  4. }

add.h:

[cpp] view plain copy
  1. int add(int x, int y);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

编译链接运行如下:

[plain] view plain copy
  1. [taoge@localhost test]$ pwd
  2. /home/taoge/test
  3. [taoge@localhost test]$ ls
  4. add.c  add.h  main.c
  5. [taoge@localhost test]$ gcc main.c add.c
  6. [taoge@localhost test]$ ./a.out
  7. sum is 3
  8. [taoge@localhost test]$

我们看到, 一切正常。 gcc会在程序当前目录、/usr/include和/usr/local/include目录下查找add.h文件, 刚好有, 所以ok.

我们进行如下操作后再编译, 却发现有误, 不怕, 我们用-I就行了:

[plain] view plain copy
  1. [taoge@localhost test]$ ls
  2. add.c  add.h  a.out  main.c
  3. [taoge@localhost test]$ rm a.out; mkdir inc; mv add.h inc
  4. [taoge@localhost test]$ ls
  5. add.c  inc  main.c
  6. [taoge@localhost test]$ gcc main.c add.c
  7. main.c:2:17: error: add.h: No such file or directory
  8. [taoge@localhost test]$
  9. [taoge@localhost test]$
  10. [taoge@localhost test]$
  11. [taoge@localhost test]$ gcc -I ./inc/ main.c add.c
  12. [taoge@localhost test]$ ls
  13. add.c  a.out  inc  main.c
  14. [taoge@localhost test]$ ./a.out
  15. sum is 3
  16. [taoge@localhost test]$

上面把add.h移动到inc目录下后, gcc就找不到add.h了, 所以报错。 此时,要利用-I来显式指定头文件的所在地,  -I就是用来干这个的:告诉gcc去哪里找头文件。

二. 再来说-L(注意是大写的L)

我们上面已经说了, -I是用来告诉gcc去哪里找头文件的, 那么-L实际上也很类似, 它是用来告诉gcc去哪里找库文件。 通常来讲, gcc默认会在程序当前目录、/lib、/usr/lib和/usr/local/lib下找对应的库。 -L的意思很明确了, 就不在赘述了。

三. 最后说说-l (注意是小写的L)

我们之前讨论过linux中的静态库和动态库, -l的作用就是用来指定具体的静态库、动态库是哪个。

请参考我之前的文章:

如何在linux下写静态链接库并卖给别人?

http://blog.csdn.net/stpeace/article/details/47030017

如何在linux下写动态链接库并卖给别人?

http://blog.csdn.net/stpeace/article/details/47047679

gcc编译出现undefined reference to 'pthread_create'的解决方法

http://blog.csdn.net/stpeace/article/details/43282611

OK, 都说完了, 希望对大家有所帮助。

睡觉。

聊聊gcc参数中的-I, -L和-l相关推荐

  1. GCC编译器中的-I -L -l 选项。

    原文链接:http://blog.csdn.net/stpeace/article/details/49408665 在本文中, 我们来聊聊gcc中三个常见的参数, 也即-I(大写的i), -L(大写 ...

  2. gcc参数 -i, -L, -l, -include

    gcc参数 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢? ...

  3. linux 编译-l,GCC编译器下的-L与-l的区别

    我们用gcc编译程序时,可能会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数,下面做个记录: 例: gcc -o he ...

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

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

  5. 可变参数中size_t遇见的问题

    在修改php扩展Trie时,出现了一个小bug PHP_FUNCTION(trie_filter_load) {Trie *trie;char *path;int path_len;if (zend_ ...

  6. C++代码片段(三)过滤可变模板参数中某些类型的变量

    将可变模板参数列表中的某些类型过滤掉,然后返回剩下数据的元组.用到了上一篇中的判断可变模板参数中是否包含某一特定类型的方法 #include <iostream> #include < ...

  7. Linux平台Makefile文件的编写基础篇和GCC参数详解

    问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...

  8. C函数参数中的三个点

    原文链接一:http://hi.baidu.com/wjun520/blog/item/1678a11da07fe68086d6b653.html C++中有函数重载这种方法,以供我们调用时要可以不确 ...

  9. 聊聊WEB项目中的图片

    最近一直在鼓捣图片相关的代码,今天抽时间写篇总结.此文没有什么高深的知识点,不汲及第三方的OSS相关点,更不汲及分布式文件存储框架,算是一篇关于WEB项目中图片相关功能的扫盲文; 同时与大家分享码字时 ...

最新文章

  1. Max_user_connections 与Max_connections 与max_connect_errors
  2. 《梦断代码》阅读笔记01
  3. AngularJs angular.uppercase、angular.lowercase、angular.fromJson、angular.toJson
  4. 常见移动机器人运动学模型
  5. 4.windows环境下如何安装memcached教程(转载+自己整理)
  6. Spring Boot (一)Spring Boot 概述
  7. 大话RabbitMQ 基础入门
  8. 计算机网络培养方案,计算机网络技术专业培养方案
  9. 强大的ETL利器—DataFlow3.0
  10. My New Game2
  11. 刘铁猛-深入浅出WPF-系列资源汇总
  12. Nginx - 正向代理与反向代理的概念
  13. java中怎么画弧线加粗,CAD中怎么把一段线、曲线或圆弧加粗
  14. 激光雷达+imu_激光雷达slam-激光点云畸变补偿
  15. webotAI网页版上线啦!
  16. 2020-03-18HTML
  17. 卓有成效的管理者|木深读书笔记
  18. 【机试】2011-2020年复旦大学考研复试机试真题
  19. 串口重定向(STM32 F411RET6开发版)
  20. 西安80坐标系转经纬度坐标系教程

热门文章

  1. [团队项目3.0]Scrum团队成立
  2. YUI 的模块信息配置优先级关系梳理
  3. Oracle转Sqlserver 记录
  4. homebrew mysql conf_homebrew 安装mysql后,如何配置mysql
  5. 以太网数据帧的报尾封装字段是什么_16、90秒快速“读懂”数据包的封装、解封装...
  6. python 浏览器显示本地文件夹_浏览器读取本地文件
  7. oracle symonym_ORACLE SYNONYM详解
  8. java util logging_简单日志记录,使用java.util.logging
  9. matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt
  10. java privilege的用法_java反射--注解的定义与运用以及权限拦截