linux-gcc 编译时头文件和库文件搜索路径

转自:http://hi.baidu.com/creater2012/blog/item/0b90004cb1e17757510ffe84.html

如何寻找头文件?
1. 当前文件夹
2. 通过 gcc的 -I参数指定的文件夹
3. 通过变量设定的文件夹 (作用同4? 只是因为可以通过系统变量来改变?),gcc认识的变量有C_INCLUDE_PATH (c语言) ,CPLUS_INCLUDE_PATH (c++语言) ,OBJC_INCLUDE_PATH (对象c?), 可以通过export C_INCLUDE_PATH来指定
4. 内建的标准头文件夹 (至于如何设定,暂时不找到, 据说gcc spec可以改变,那么如何通过系统改变?)

如果#include<xx.h> 那么先在4(3) 中找,再在1,2中找
如果#include "xx.h" 那么先在1中找,接着 2中找,接着4(3)中找

不过这里有一个要特别提醒的是,假如项目放在/home/project下面, 头文件都放在/hom/project/include下面, 源码放在/home/project下面,假设一个源文件包含了头文件/home/project/include/a.h, 那么在这个源文件中include这个头文件时有2种方法
一种是#include "./include/a.h" 指定a.h相对于这个源码的相对路径, 那么在编译的时候无须指定任何参数
第二种是#include "a.h",  这个时候需要通过-I /home/project/include来指定查找的路径, 这种方法的好处是,如果有要包含很多/home/project/include下面的路径, 可以保持代码的整洁,同时以后还可以改变include这个文件夹的位置, 而不需要修改源文件

ps. 看了下gcc的说明稳定,好像还可以通过-iprefix来指定, 不过一般上面的就足够了

如何寻找库文件:
1。gcc -L参数指定的文件夹
2。设定变量, gcc支持的环境变量有LIBRARY_PATH, LD_LIBRARY_PATH (动态库?)
3。配置文件/etc/ld.so.conf指定的, 注意实际读的是ld.so.cache, 所以修改后要用ldconfig更新一下
 
另外据说/lib /usr/lib是默认的,暂时还不确定

连接库文件:
相对于头文件, 除了查找库文件外, 还需要连接库文件, 用-l参数
另外库文件的文件名一般是libname.so, 用-l参数的时候只要跟其中的name即可, lib跟so是不需要的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值