当把程序链接到一个链接库时,只会链接程序所用到的函数的目标文件。在已编译的目标文件之外,如果创建自己的链接库,可以使用 ar 命令。标准库的大部分函数通常放在文件 libc.a 中(文件名后缀
.a
代表“achieve”,译为“获取”),或者放在用于共享的动态链接文件 libc.so 中(文件名后缀.so
代表“share object”,译为“共享对象”)。这些链接库一般位于 /lib/ 或 /usr/lib/,或者位于 GCC 默认搜索的其他目录。-l
选项(小写的 L)可以让我们手动添加链接库。下面我们编写一个数学程序 main.c,并使用到了 cos() 函数,它位于 <math.h> 头文件。
//main.c #include <stdio.h> /* printf */ #include <math.h> /* cos */ #define PI 3.14159265 int main () { double param, result; param = 60.0; result = cos ( param * PI / 180.0 ); printf ("The cosine of %f degrees is %f.\n", param, result ); return 0; }如果我们不使用 -l 选项:
[root@bogon demo]# gcc main.c
/tmp/ccYfkZJk.o: In function `main':
main.c:(.text+0x34): undefined reference to `cos'
collect2: ld returned 1 exit status
-l
选项,以链接数学库:
[root@bogon demo]# gcc main.c -o main.out -lm
数学库的文件名是 libm.a。前缀lib
和后缀.a
是标准的,m
是基本名称,GCC 会在-l
选项后紧跟着的基本名称的基础上自动添加这些前缀、后缀,本例中,基本名称为 m。在支持动态链接的系统上,GCC 自动使用在 Darwin 上的共享链接库 libm.so 或 libm.dylib。
[root@bogon demo]# gcc main.c -o main.out /usr/lib/libm.a
-L
选项,为 GCC 增加另一个搜索链接库的目录:
[root@bogon demo]# gcc main.c -o main.out -L/usr/lib -lm
可以使用多个-L
选项,或者在一个-L
选项内使用冒号分割的路径列表。Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有