c++ 标准头文件路径
在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有        些公    用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使        用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。
对文件包含命令还要说明以下几点:1. 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的:#include"stdio.h"#include但是这两种形式是有区别的:使用尖括号表示在包含文件目录中去查(包含目录是由用户在设置环境时    设置的),而不在源文件目录去查;使用双引号则表示首先在当前的源文件目录中查,若未到才到包含目录中去查。用户编程时可根据    自己文件所在的目录来选择某一种命令形式。2. 一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。3. 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。
linux查看当前文件夹内容1.include<头文件名>和include"头文件名"
如:include和include"stdio.h"
前者(使用<>),来引用stdio.件,是首先检索标准路径,看看这些文件夹下是否有该头文件;如果没有,也不会检索当前文件所在路径,并将报错。
后者(使用""),来引用stdio.件,是首先检索文件的当前路径;如果没有,再检索标准路径,看看这些文件夹下是否有该头文件。
2.linux下,上述标准路径有:/usr/include,/usr/local/include。
3.。如,等。其中,前面的字符串(如sys,net)表示标准路径下的文件夹名,后面的字符串(如io.h,ethernet.h),表示在linux标准路径下的各文件夹下的头文件名,如sys文件夹下的io.件,即我们可以在/usr/include/sys目录下发现io.件。
linux博大精深,需要慢慢积累。
4.如果想在指定路径下检索头文件,可加选项-I。如我的/home/Desktop目录下有个头文件local1.h,在编译包含local1.h的test.c文件时,可用:gcc test.c -o test -I /root/Desktop。 
一、讨论环境*操作系统:Redhat5/Fedora14
*编译器:gcc 4.5.1
.
二、C语言头文件的查路径C语言,使用include指令,包含头文件,但又细分两种形式:
1、形式一:#include “file1”gcc先在当前目录(指包含本条#include指令的源文件所在的目录)寻file1,如果不到,继续在由-iquote选项(如果有的话)指定的目录中寻file1。
  例如,在文件/usr/include/sys/stat.h中,包含指令#include “types.h”,那么gcc先在/usr/include/sys目录下寻types.件。嗯,在该目录下,确实存在一个types.h的文件。现假设我们把这个文件移动到另一个目录:mv /usr/include/sys/types.h /bar/foo/,我们在编译时,可以通过-iquote选项,在不改变stat.h的情况下,正常编译(当然,通常不建议这样做):
gcc -iquote /bar/foo -I/usr/include/sys *.o
2、形式二:#include gcc按照以下顺序查file2:
-Idir1 -Idir2 ... /usr/local/include libdir/gcc///include /usr//include /usr/include 第一行中,-Idir1 -Idir2 ... 是用户通过gcc的-I选项指定的目录。值得一提的是,放在/usr/local/include/下的头文件也会被gcc自动的检索,这与/usr/local/lib/目录下的库处理方式是不一样的(gcc的链接器在运行时阶段不会自动查该目录下的库文件,下一节会提到)。
三、C语言库文件的查路径C语言库文件的查路径,又分为两个阶段:链接阶段、运行时阶段。
1、链接阶段(link time)此阶段,需要告诉编译器,在哪里到库文件?以静态还是动态的方式链接库文件?默认情况下使用动态方式链接,这要求存在对应的.so动态库文件,如果不存在,则寻相应的.a静态库文件。若在编译时向gcc传入-static选项,则使用静态方式链接,这要求所有库文件都必须有对应的*.a静态库。
  那么,是否可以令某些库使用动态链接,另一些库使用静态链接?不太确定,请参考ld的使用手册,我没有这样用过。
  切入正题,在链接阶段,gcc编译器如何寻库文件呢(linker本身并没有默认的查路径,
这些查路径是由gcc传递给linker的)?大家可以在编译时,向gcc加入-v选项来观察它向linker传递的库文件查路径(观察LIBRARY_PATH变量的值),通常查路径如下:
任何由-rpath-link或-rpath选项指定的目录 LD_RUN_PATH(如果没有到-rpath或-rpath-link选项) -Ldir1 -Ldir2 ... /usr/lib/gcc/// /usr/lib/ 第一行-rpath-link与-rpath选项的区别在于,-rpath选项指定的目录被硬编码到可执行文件中,-rpath-link选项指定的目录只在链接阶段生效。由于这两个选项都是链接器ld的选项,如何从gcc中向ld传递这两个选项?方法如下(更从细节参考gcc的-Wl选项):
gcc -Wl, -rpath, /usr/local/lib
这相当于向ld向传递了如下参数:
ld -rpath /usr/local/lib
第二行,如果没有设置-rpath或-rpath-link选项,则查LD_RUN_PATH环境变量指定的目录,并把它当作-rpath选项来处理。第三行-Ldir1 -Ldir2 ...,是我们通过gcc的-L选项向其指定的库文件查路径,查顺序按照我们传递的-L参数从左到右进行搜索;第四行属于gcc
自己的库目录;第五行/usr/lib/是Linux系统默认的系统库文件的目录。第四、第五行,都是gcc自动向linker传递的查目录。例如我现在的机器上,使用gcc -v可以看到LIBRARY_PATH变量值为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。