在使用gcc编译连接生成可执行文件时,经常会碰到变量未定义、链接时或者运行可执行文件时找不到相应的动态库等问题,本文首先介绍了gcc在编译时头文件路径相关选项以及搜索路径顺序,然后讨论了编译成可执行文件时动态库的搜索路径顺序,最后说明了生成可执行文件后,运行文件时动态库的搜索路径顺序。搞清楚这三个搜索路径,在用gcc碰到的未定义变量或搜索不到动态库的问题,基本上都可以解决了。
头文件路径编译时相关选项
gcc可以使用选项-I(注意是大写)来指定头文件搜索路径,即头文件所在的文件夹。指定的路径即可以是绝对路径也可以是相对路径。比如当前路径下有文件hello.c和include/testhead.h,则有两种方法访问这个头文件:
hello.c中#include "include/testhead.h"直接指定头文件的路径,然后可以直接编译不需要选项-I了,即gcc hello.c。
hello.c中#include "testhead.h",在编译时使用:gcc -I include hello.c或者gcc -I ./include hello.c,在编译选项中指定头文件的路径。
另外选项-nostdinc使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置。
两种不类型的头文件