标准库的大部分函数通常放在文件 libc.a 中(文件名后缀.a
代表“achieve”,译为“获取”),或者放在用于共享的动态链接文件 libc.so 中(文件名后缀.so
代表“share object”,译为“共享对象”)。这些链接库一般位于 /lib/ 或 /usr/lib/,或者位于 GCC 默认搜索的其他目录。
当使用 GCC 编译和链接程序时,GCC 默认会链接 libc.a 或者 libc.so,但是对于其他的库(例如非标准库、第三方库等),就需要手动添加。
GCC 的-l
选项(小写的 L)可以让我们手动添加链接库。
GCC 编译器无法找到 cos() 这个函数。为了编译这个 main.c,必须使用-l
选项,以链接数学库:
[root@bogon demo]# gcc main.c -o main.out -lm
数学库的文件名是 libm.a。前缀lib
和后缀.a
是标准的,m
是基本名称,GCC 会在-l
选项后紧跟着的基本名称的基础上自动添加这些前缀、后缀,本例中,基本名称为 m。
链接其它目录中的库
1) 把链接库作为一般的目标文件,为 GCC 指定该链接库的完整路径与文件名。
例如,如果链接库名为 libm.a,并且位于 /usr/lib 目录,那么下面的命令会让 GCC 编译 main.c,然后将 libm.a 链接到 main.o:
[root@bogon demo]# gcc main.c -o main.out /usr/lib/libm.a
2) 使用-L
选项,为 GCC 增加另一个搜索链接库的目录:
[root@bogon demo]# gcc main.c -o main.out -L/usr/lib -lm
可以使用多个-L
选项,或者在一个-L
选项内使用冒号分割的路径列表。
3) 把包括所需链接库的目录加到环境变量 LIBRARYPATH 中。