- 编译时加入额外函式库连结的方式:
[root@www ~]# gcc sin.c -lm -L/lib -L/usr/lib <==重点在 -lm [root@www ~]# ./a.out <==尝试运行新文件! 1.000000 |
特别注意,使用 gcc 编译时所加入的那个 -lm 是有意义的,他可以拆开成两部份来看:
- -l :是『加入某个函式库(library)』的意思,
- m :则是 libm.so 这个函式库,其中, lib 与扩展名(.a 或 .so)不需要写
所以 -lm 表示使用 libm.so (或 libm.a) 这个函式库的意思~至於那个 -L 后面接的路径呢?这表示:『我要的函式库 libm.so 请到 /lib 或 /usr/lib 里面搜寻!』
上面的说明很清楚了吧!不过,要注意的是,由於 Linux 默认是将函式库放置在 /lib 与 /usr/lib 当中,所以你没有写 -L/lib 与 -L/usr/lib 也没有关系的!不过,万一哪天你使用的函式库并非放置在这两个目录下,那么-L/path 就很重要了!否则会找不到函式库喔!
除了连结的函式库之外,你或许已经发现一个奇怪的地方,那就是在我们的sin.c 当中第一行『 #include<stdio.h>』,这行说的是要将一些定义数据由 stdio.h 这个文件读入,这包括 printf 的相关配置。这个文件其实是放置在 /usr/include/stdio.h的!那么万一这个文件并非放置在这里呢?那么我们就可以使用底下的方式来定义出要读取的include 文件放置的目录:
[root@www ~]# gcc sin.c -lm -I/usr/include
|
-I/path 后面接的路径( Path )就是配置要去搜寻相关的include 文件的目录啦!不过,同样的,默认值是放置在 /usr/include 底下,除非你的include 文件放置在其他路径,否则也可以略过这个项目!