gcc如何寻找头文件
README
- 作者:邢万里
- 学校:重庆邮电大学
- email:wlxing@yahoo.com
GCC - 头文件
注:如果遇到无法找到xxx头文件,一般来说,安装包没有安装全(要装dev的包,如xxx-dev)导致的。
此部分关于gcc编译时,如何查询相应的头文件。按顺序依次往下找:
1. 默认情况:
(1)header file的搜寻会从-I参数开始
(2)gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
(3)指定目录目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/[数字编号,如4.6]/include
/usr/lib/gcc-lib/i386-linux/[数字编号]/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/[数字编号]/../../../../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
GCC - 库文件
(1)gcc会去找-L
(2)gcc环境变量LIBRARY_PATH
(3)指定目录:
/usr/local/lib/
/usr/lib/
GCC - 动态库
- 搜索路径
方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径
方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:”分隔)
方法三:在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数”-Wl,-rpath,”指定。当指定多个动态库搜索路径时,路径之间用冒号”:”分隔)。
四:默认的动态库搜索路径/lib
五:默认的动态库搜索路径/usr/lib - 搜索顺序
动态库的搜索路径搜索的先后顺序是:
(1).编译目标代码时指定的动态库搜索路径;
(2).环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
(3).配置文件/etc/ld.so.conf中指定的动态库搜索路径;
(4).默认的动态库搜索路径/lib;
(5).默认的动态库搜索路径/usr/lib.
其他
静态库和动态库
(1)静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
(2)静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。头文件和库文件
(1)头文件是“界面”,库是“实现”;头文件中有函数的申明,库文件实现函数的定义。
(2)库文件一般是以二进制形式而不是C源文件形式提供给用户使用的。
(3)头文件以.h结尾,可以用文本编辑器查看内容,是ASCII的。而库文件以.a(静态库)或.so(动态库)结尾,是二进制的。