linux卸载gcc编译环境变量,centos系统gcc编译器常找不到头文件解决办法 and 环境变量修改...

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中的变量,他们是"父子"关系

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值