个人工具
登录
查看“Gcchowto”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Gcchowto”的源代码
来自Ubuntu中文
←
Gcchowto
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 链接外部库 == 库是预编译的目标文件(object files)的集合,它们可被链接进程序。静态库以后缀为‘.a’的特殊的''存档文件(archive file)''存储。 标准系统库可在目录 '''/usr/lib''' 与 '''/lib''' 中找到。比如,在类 Unix 系统中 C 语言的数学库一般存储为文件 '''/usr/lib/libm.a'''。该库中函数的原型声明在头文件 '''/usr/include/math.h''' 中。C 标准库本身存储为 '''/usr/lib/libc.a''',它包含 ANSI/ISO C 标准指定的函数,比如‘printf’。对每一个 C 程序来说,libc.a 都默认被链接。 下面的是一个调用数学库 '''libm.a''' 中 '''sin''' 函数的的例子,创建文件'''calc.c''': <source lang="c"> #include <math.h> #include <stdio.h> int main (void) { double x = 2.0; double y = sin (x); printf ("The value of sin(2.0) is %f\n", y); return 0; } </source> 尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误: $ gcc -Wall calc.c -o calc /tmp/ccbR6Ojm.o: In function 'main': /tmp/ccbR6Ojm.o(.text+0x19): undefined reference to ‘sin’ 函数 '''sin''',未在本程序中定义也不在默认库‘libc.a’中;除非被指定,编译器也不会链接‘libm.a’。 为使编译器能将 '''sin''' 链接进主程序‘calc.c’,我们需要提供数学库‘libm.a’。一个容易想到但比较麻烦的做法是在命令行中显式地指定它: $ gcc -Wall calc.c /usr/lib/libm.a -o calc 函数库‘libm.a’包含所有数学函数的目标文件,比如'''sin''','''cos''','''exp''','''log'''及'''sqrt'''。链接器将搜索所有文件来找到包含 '''sin''' 的目标文件。 一旦包含 '''sin''' 的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了: $ ./calc The value of sin(2.0) is 0.909297 可执行文件包含主程序的机器码以及函数库‘libm.a’中 '''sin''' 对应的机器码。 为避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项‘-l’。例如,下面的命令 $ gcc -Wall calc.c -lm -o calc 与我们上面指定库全路径‘/usr/lib/libm.a’的命令等价。 一般来说,选项 '''-l'''''NAME''使链接器尝试链接系统库目录中的函数库文件 '''lib'''''NAME''.'''a'''。一个大型的程序通常要使用很多 '''-l''' 选项来指定要链接的数学库,图形库,网络库等。
返回至
Gcchowto
。