gcc在进行编译预处理时,要在工具链默认的一些头文件目录中搜索头文件,这些目录一般包括 /usr/include 和 /usr/local/include(Linux的系统头文件一般存储在/usr/include 目录下,自己安装的软件的头文件一般存放在/usr/local/include目录下)。如果希望gcc能够到其他目录中查找头文件,则需要在参数上指定,如:
gcc -I~/include main.c # -I 参数用于增加头文件的查找目录
如果在源码中使用了共享库中的函数,则目标文件就要与相应的共享库连接起来。gcc 默认会连接 C 共享库,因为它提供了基本的系统调用接口,几乎所有的程序都会使用它。如果要连接其它共享库则必须在参数上指定,例如:
gcc -lpthread main.c # -I 参数用于指定要连接的共享库
pthread 是线程库,如果程序中用了线程相关函数,必须与这个库连接。要注意共享库的文件名一般是 lib*.so ,但在 -l 参数后面时不需要写全,编译器会自动将名字补全成文件名。
链接共享库时 gcc 到默认的一些目录中查找,这些目录一般包括 /usr/lib 和 /lib 。如果要链接的共享库在其它目录中,需要 -L 参数指定,如:
gcc -L~/src/sqlite3 -lsqlite3 main.c # -L 参数用于指定查找共享库的目录
注意: -L参数只是指明到哪里去找共享库,但gcc并不知道要链接哪个库,需要通过 -l 参数指明要链接的共享库名。
gcc -I~/include main.c # -I 参数用于增加头文件的查找目录
如果在源码中使用了共享库中的函数,则目标文件就要与相应的共享库连接起来。gcc 默认会连接 C 共享库,因为它提供了基本的系统调用接口,几乎所有的程序都会使用它。如果要连接其它共享库则必须在参数上指定,例如:
gcc -lpthread main.c # -I 参数用于指定要连接的共享库
pthread 是线程库,如果程序中用了线程相关函数,必须与这个库连接。要注意共享库的文件名一般是 lib*.so ,但在 -l 参数后面时不需要写全,编译器会自动将名字补全成文件名。
链接共享库时 gcc 到默认的一些目录中查找,这些目录一般包括 /usr/lib 和 /lib 。如果要链接的共享库在其它目录中,需要 -L 参数指定,如:
gcc -L~/src/sqlite3 -lsqlite3 main.c # -L 参数用于指定查找共享库的目录
注意: -L参数只是指明到哪里去找共享库,但gcc并不知道要链接哪个库,需要通过 -l 参数指明要链接的共享库名。