赞
踩
http://blog.csdn.net/longxj04/article/details/9118891
一.#include <>与#include “”
#include <>直接到系统指定的某些目录中去找某些头文件。
#include “”先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。
二.gcc 指定头文件的三种情况:
1.会在默认情况下指定到/usr/include文件夹(更深层次的是一个相对路径,gcc可执行程序的路径是/usr/bin/gcc,那么它在实际
工作时指定头文件头径是一种相对路径方法,换算成绝对路径就是加上/usr/include,如#include 就是包含/usr/include
/stdio.h)
2.GCC还使用了-I指定路径的方式,即
gcc -I 头文件所在文件夹(绝对路径或相对路径均可) 源文件
举一个例子:
设当前路径为/root/test,其结构如下:
include_test.c
include/include_test.h
有两种方法访问到include_test.h。
1. include_test.c中#include “include/include_test.h”然后gcc
include_test.c即可
2.
include_test.c中#include 或者#include 然后gcc
–I include include_test.c也可
3. 参数:-nostdinc使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置。
在编译驱动模块时,由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include要用参数-nostdinc,还要自己用-I参数来指定内核头文件路径,这个时候必须在Makefile中指定。
头文件搜索顺序:
1.由参数-I指定的路径(指定路径有多个路径时,按指定路径的顺序搜索)
2.然后找gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
OBJC_INCLUDE_PATH
3.再找内定目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
库文件,但是如果装gcc的时候,是有给定的prefix的话,那么就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
有些程序安装之后默认的头文件安装目录不在/usr/include等内定目录里,这时候如果要用到安装的头文件就必须指定路径,即在编译时用gcc
-I/头文件路径 文件 。这样会非常麻烦,简单的方法的通过环境变量C_INCLUDE_PATH来指定默认搜索路径。
环境变量修改
1.临时修改,只在当前shell中生效
a.首先显示变量内容:echo $C_INCLUDE_PATH
b.然后在原来的变量内容后面添加程序的头文件目录:C_INCLUDE_PATH=$C_INCLUDE_PATH:路径1:路径2:
... :路径n
c.如果变量原来不存在,也就是说第a步不显示内容,那么直接设定变量即可:C_INCLUDE_PATH=路径1:路径2: ...
:路径n
d.最后用export命令让更新后的变量成为环境变量:export C_INCLUDE_PATH
2.永久性修改,需修改配置文件
(1)/etc/profile:对所有用户生效;此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行;并从/etc/profile.d目录的配置文件中搜集shell的设置
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
添加一行:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改后需要执行重新登录才能生效,也可以执行命令source /etc/profile来生效
(2)/etc/bashrc:对所有用户生效;为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
(3)~/.bash_profile:仅会对当前用户有效;每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次
例如:编辑guok用户目录(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
修改后需要执行重新登录才能生效,也可以执行命令source 来生效
(4)~/.bashrc:仅会对当前用户有效;该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取
另外,~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。