#include <syshead.h>
#include "userhead.h"
用尖括号表示的是包含系统的头文件,用双引号包含的是用户本身的头文件。
a. 使用<>
包含的头文件通常会先搜索-I
选项后的路径(即用gcc编译时的-I
选项),以后就是标准的系统头文件路径
。
b. 而用""
号包含的头文件会首先搜索当前的工做目录,以后的搜索路径才是和<>
号包含的头文件所搜索的路径同样的路径。
c. 在unix系统中,通常标准的头文件路径为:
/usr/local/include
/usr/lib/gcc-lib/target/version/include
/usr/target/include
/usr/include
d. 通常有两条独立的头文件搜索路径链。一条是-I后面指示的路径,另外一条是系统头文件路径和以-prefix, -withprefix,和-idirafter后操做的目录。
e. 在头文件中运行增长路径名,例如:#include <sys/time.h>,那么就会在搜索的系统目录的sys目录下寻找time.h文件。
-I /some/dir
,则在/some/dir
中查找。C_INCLUDE_PATH
,则在指定的目录中查找。预设的路径
中查找,这是不需要指定的,编译时一定会在该路径中搜索所需的头文件。关于内定目录
内定搜索目录,这是编译器自身预设的目录。由于是内定的,一定会搜索,所以总是最后才搜索。
/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
静态库
,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。
动态库
,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。
1、如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。
2、linux的可执行程序在执行
的时候默认是先搜索/lib
和/usr/lib
这两个目录,然后按照/etc/ld.so.conf
里面的配置搜索绝对路径。
3、同时,Linux也提供了环境变量LD_LIBRARY_PATH
供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local
或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)
。
-L /some/lib
,则在/some/lib
中查找。LIBRARY_PATH
(静态库)、LD_LIBRARY_PATH
(动态库)。/lib:/usr/lib:/usr/local/lib
这是当初编译gcc时写在程序内的。export PATH=/usr/local/mybin:$PATH
可执行文件配置
export C_INCLUDE_PATH=/usr/local/myinclude:$C_INCLUDE_PATH
头文件配置
export LIBRARY_PATH=/usr/local/mylib:$LIBRARY_PATH
库文件配置
export LD_LIBRARY_PATH=/usr/local/mylib:$LIBRARY_PATH
动态库文件配置
export PATH=/usr/local/mybin:$PATH
可执行文件配置
export C_INCLUDE_PATH=/usr/local/myinclude:$C_INCLUDE_PATH
头文件配置
export LIBRARY_PATH=/usr/local/mylib:$LIBRARY_PATH
静态库文件配置
export LD_LIBRARY_PATH=/usr/local/mylib:$LD_LIBRARY_PATH
动态库文件配置
:
冒号表示指定多个不同的路径
将以上配置写入以下两个级别的文件夹里即可完成配置
配置完成之后例如运行source /etc/profile
使其配置生效,或者重启
(1)
/etc/profile
:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/bash.bashrc文件。/etc/bash.bashrc:系统级的bashrc文件。
(2)/etc/environment
:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
(1)
~/.profile
:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次! 默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方
(2)~/.bashrc
:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。
关于 Why LD_LIBRARY_PATH is bad 请参考http://www.voidcn.com/article/p-ayjwaghe-za.html