这是一个不复杂的问题;但是网上很多回答都不全面;偶找了一个比较全面的(测试过):

#include有两种形式,例如如下:

#include <syshead.h>
#include "userhead.h"
用尖括号表示的是包含系统的头文件,用双引号包含的是用户自己的头文件。

下面是使用#include时的一些规则:

1)使用<>包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。

2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是和<>号包含的头文件所搜索的路径一样的路径。

3)在unix系统中,一般标准的头文件路径为:

/usr/local/include
/usr/lib/gcc-lib/target/version/include
/usr/target/include
/usr/include
4)一般有两条独立的头文件搜索路径链。一条是-I后面指示的路径,另一条是系统头文件路径和以-prefix, -withprefix,和-idirafter后操作的目录。

5)如果gcc编译的是c++的程序,那么在搜索上面所说的目录前,预处理器会首先搜索/usr/include/g++v3目录,v3是你的gcc中c++的版本。

6)在头文件中运行增加路径名,例如:#include <sys/time.h>,那么就会在搜索的系统目录的sys目录下寻找time.h文件。

7)一般会用斜线来作为目录的分割符,甚至有些系统使用不同的字符作为分割符(例如反斜线)。

8)#include后面所包含的文件名就是文件名,例如abc*d.h这个文件,必须就要有abc*d.h这个文件,而不是abckkkd.h这些文件,*不能解释成任

何的字符的意思,而是实实在在的一个字符。

9)可以使用一个指定的名字作为#include指令后面的头文件,例如:

#define BOGHEADER "bog_3.h"
#include BOGHEADER
10)在#include 指令的后面,除了所包含的头文件和注释外,不能包含其它的任何东西了。

11)#line指令不能改变当前的工作目录。

12)-I-选项可以改变-I指定的搜索目录。

gcc 编译时 include 搜索路径的更多相关文章

  1. C和C++中include 搜索路径的一般形式以及gcc搜索头文件的路径

    C和C++中include 搜索路径的一般形式 对于include 搜索的路径: C中可以通过 #include <stdio.h> 和 #include "stidio.h&q ...

  2. 【转载】Linux下动态共享库加载时的搜索路径详解

    转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...

  3. Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  4. <摘录>Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...

  5. 环境变量,include搜索路径,lib库搜索路径

    环境变量 系统环境变量 我们知道,我们经常要设置一些环境变量,系统环境变量我们非常容易理解.其实我们在windows中经常容易接触.其实环境变量是一个非常广泛的一个概念,它与web应用程序中的web. ...

  6. gcc编译时指定链接库的查找目录

    gcc编译时,如果需要链接的库的目录不在标准目录,则需要通过将保护库的目录/aa/bb/cc通过-L/aa/bb/cc 添加到搜索路径中,如: gcc -o xmltest xml_test.cpp ...

  7. ClassLoader加载资源时的搜索路径

    先来个例子: /** * 测试classloader加载路径在哪里<p> * main3 */ public static void main3(String[] args) { Prop ...

  8. gcc编译时对'xxxx'未定义的引用问题

    gcc编译时对’xxxx’未定义的引用问题 gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没 ...

  9. gcc编译时对’xxxx’未定义的引用问题

    gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行 ...

随机推荐

  1. 关于hadoop

    hadoop 是什么? 1. 适合海量数据的分布式存储与计算平台. 海量: 是指 1T 以上数据. 分布式: 任务分配到多态虚拟机上进行计算. 2. 多个任务是怎么被分配到多个虚拟机当中的? 分配是需 ...

  2. 拯救你的文档 – 【DevOps敏捷开发动手实验】开源文档发布

    今天上海的天气真是不错,风和日丽.再次来到微软上海紫竹研发中心,心情很是愉快,喜欢这里的大草坪,喜欢这里的工程气氛,更喜欢今天来陪我的小伙伴们. 这次动手实验培训与以往最大的不同就是采用了开源文档的方 ...

  3. yii2实战教程之第一个Yii程序

    之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统.出于实战基础加之自C语言的书籍出版以来,几乎所有的编程书籍都讲述了一个Hello World的例子作为开始.虽然我们仅仅是学习Yii2,但是 ...

  4. 思考:用开发移动app的观念来开发网站

    首先祝大家新年快乐.万事如意. 开发网站程序也有一些年头了,从最初的静态HTML+ JS,到后来的WebForm,然后过渡到现在的MVC. 由于最近做一些技术调研,也接触了很多移动开发,iOS和And ...

  5. Windows 8.1 低功耗蓝牙开发

    1. 概述 在蓝牙4.0发布以前,给大家的直观印象就是蓝牙耳机,它就是用来满足短距离内中等带宽的音频通信需求.然而蓝牙4.0发布之后,用途就大不一样了,特别是现在物联网和可穿戴之风盛行的年代,很多小玩 ...

  6. ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper的解决办法

    如下图: 如果出现了这样的错误,最大的可能是:你没有在 WEB-INF/lib 目录下放入相关的jar包(jackson-core/annotations/databind.jar) 如果你在WEB- ...

  7. Tomcat 启动报错:No default web.xml

    原因是:tomcat 中conf 目录中的 web.xml 被无意删除掉了.从其他tomcat中复制一个过来就行了. conf 目录 没有 web.xml 导致的问题是,server.xml 中配置的 ...

  8. send+recv注意事项

    [TOC] send 函数原型 ssize_t send( SOCKET s, const char *buf, size_t len, int flags ) 注意事项 待发送数据长度data_le ...

  9. linux中tar之解压和压缩常用

    我们知道在windows中解压和压缩有两个非常强大的工具winRar和国产的好压工具,在linux中也有一款强大的解压和压缩工具.那就是大名鼎鼎的tar.我们首先看看tar命令的使用格式 语法:tar ...

  10. springmvc 上传下载

    springmvc文件上传下载在网上搜索的代码 参考整理了一份需要使用的jar.commons-fileupload.jar与commons-io-1.4.jar 二个文件 1.表单属性为: enct ...