参考文章;http://hi.baidu.com/njuhappy/item/83f8bfbd7c5d3162bb0e1237

http://blog.sina.com.cn/s/blog_7745fc8601016zum.html

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

例:

gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld

上面这句表示在编译hello.c时:

-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/includ

-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib

 -lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)

gcc -l参数和-L参数

-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。

好 了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib 里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配 套的头文件)

放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目 录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr /X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L /aaa/bbb/ccc -ltest

另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x,/lib/libm.so.6又链接到/lib/libm-2.3.2.so,

如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so

手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如

gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了--libs参数外还有一个参数是--cflags用来生成头 文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果

现 在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。注意`不是单引号,而是1键左边那个键。

5、-include和-I参数

-include 用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I /myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。

6.

-D name

 Predefine name as a macro, with definition 1.

  通常debug和release版的区别就在于是否有DEBUG宏,DEBUG宏可以通过-D选项传递。如:-DDEBUG

GCC中的编译选项“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数相关推荐

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

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

  2. Makefile中的“-I”(大写i),“-L”(大写l),“-l”(小写l)

    用gcc编译程序时,可能会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数, "-I"(大写i):表 ...

  3. Linux+gcc设置断点,gcc/g++常用编译选项和gdb常用调试命令

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? gcc/g++编译器是我们写编译C/C++程序时离不开的编译工具,而gdb又是调试C/C++程序的利器,这一篇文章我们记 ...

  4. GCC中同时使用动态和静态库链接的编译

    2019独角兽企业重金招聘Python工程师标准>>> 如何同时同时使用动态和静态库链接,在GCC指令参数中具体参数如下:     -Wl,-Bstatic -L/usr/local ...

  5. Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个

    6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个 题目 题目描述 程序清单6-10 破题 代码 运行实例 题 ...

  6. gcc中的内嵌汇编语言(Intel i386平台)

    gcc中的内嵌汇编语言(Inteli386平台) 一.声明 虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的.有些汇编语言代码是直接写在汇编源程序中的, ...

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

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

  8. [转] GCC 中的编译器堆栈保护技术

    以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞.由此引发的安全问题比比皆是.早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序 ...

  9. c linux 获取cpuid_[C] 在GCC中获取CPUID信息(兼容VC)

    前面我们尝试过在VC中获取CPUID信息.现在再来试试GCC编译器. 一.调用CPUID指令 怎么调用CPUID指令呢?有三种办法-- 1. 用汇编语言编写一个cpuid函数,然后调整链接器配置,在C ...

  10. linux smp lock 锁总线 内嵌汇编,gcc中的内嵌汇编语言(Inteli386平台)

    gcc中的内嵌汇编语言(Intel i386平台) 一.声明 虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中 还是有一部分是用汇编语言写成的.有些汇编语言代码是直接写在汇 编源程序 ...

最新文章

  1. 灰度图像的对数变换原理及OpenCV代码实现
  2. angular select设置默认选中_技术分享 | Charset 和 Collat??ion 设置对 MySQL 性能的影响...
  3. hiho一下 第五周 Hihocoder #1037 : 数字三角形
  4. 苹果关掉200m限制_苹果下载大于200M限制
  5. python中缩进在程序中_python代码缩进
  6. 【STL深入学习】SGI STL空间配置器详解(二)-第二级空间配置器
  7. 目标检测——YOLO系列算法(YOLOv4、YOLOv5)的学习笔记
  8. BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
  9. BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)
  10. 鸿蒙的下一个时期叫什么,华为鸿蒙,一个本属于2025年的产品
  11. Redis实现MongoDB的getlasterror功能
  12. 环保材料“接棒”汽车电子成主业?路畅科技“等到”金主
  13. 10.5NOIP模拟考 dfs序+贪心
  14. oracle cdr是什么,基础:CDR软件中曲线工具的使用
  15. Android 添加GridView中图片的圆角样式
  16. python~运算符_python运算符
  17. 1096:数字统计(C C++)
  18. cacheable更新_@Cacheable不会拦截该方法,缓存始终为空
  19. 夜深忽梦少年事,7年又一年,来看看95年那个小伙现在怎么样了
  20. isDebugEnabled作用

热门文章

  1. 分清cols和rows,x与y,以及width和height的关系
  2. elasticsearch+logstash+kibana+filebeat+kafka
  3. canvas画带圆角矩形
  4. reactjs视频教程
  5. pytorch model.cuda()花费时间很长
  6. teredo 未能解析服务器名,Win10系统Xboxlive显示Teredo无法进行限定怎么解决
  7. 欧拉恒等式:数学史上的真正完美公式!
  8. 2021-2023年个人发展规划整理
  9. 拾忆书苑(图书商城系统)网站的设计与实现(html;DIV+CSS; Bootstrap; Dreamweaver; Photoshop)
  10. mysql的配置文件(my.ini或者 my.cnf)所在位置