如何在linux的gcc中添加c语言的外部链接库(“比如说,math.h"
来源:互联网 发布:淘宝的星期四官换机 编辑:程序博客网 时间:2024/05/20 13:09
库是预编译的目标文件(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 中 sqrt函数的的例子,创建文件ctest3.c:
#include<stdio.h>
#include<math.h>
main()
{
long int i,x,y;
for(i=1;i<100000;i++)
{
x=sqrt(i+100);
y=sqrt(i+268);
if(x*x==i+100&&y*y==i+268)
printf("\n%ld\n",i);
}
}
尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误:
root@mail:~/han# gcc -o ctest3 ctest3.c
/tmp/ccGWSm28.o: In function `main':
ctest3.c:(.text+0x3c): undefined reference to `sqrt'
ctest3.c:(.text+0x75): undefined reference to `sqrt'
collect2: ld returned 1 exit status
函数 sqrt,未在本程序中定义也不在默认库‘libc.a’中;除非被指定,编译器也不会链接‘libm.a’。
为使编译器能将sqrt链接进主程序‘ctest3.c’,我们需要提供数学库‘libm.a’。函数库‘libm.a’包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。链接器将搜索所有文件来找到包含 sqrt的目标文件。它的具体位置在/usr/lib文件目录下。
编译器为链接函数库提供了快捷的选项‘-l’。例如,下面的命令
gcc -lm -o ctest3 ctest3.c
与我们上面指定库全路径‘/usr/lib/libm.a’的命令等价。
输出结果为:
root@mail:~/han# ./ctest3
21
261
1581
一般来说,选项 -lNAME使链接器尝试链接系统库目录中的函数库文件 libNAME.a。一个大型的程序通常要使用很多 -l选项来指定要链接的数学库,图形库,网络库等。
- 如何在linux的gcc中添加c语言的外部链接库(“比如说,math.h"
- mips-elf-gcc中添加math.h的方法
- c语言中包含math.h的时用gcc编译要加-lm参数
- gcc下链接外部库(如 time.h math.h等)
- C语言在中<math.h>中sqrt()函数的使用
- linux中math.h库的使用
- linux的路径中./.是什么意思 比如说搜索某个文件,发现该文件在./.mozilla/a/b/c/该文件
- C语言math库#include<math.h>
- [C/C++]C语言中math.h和cmath的pow()精度问题
- 回忆C古老的math.h库
- 如何在VC工程生成的exe当中添加不常见的资源(比如说zip包)
- C语言math.h库函数中atan与atan2的区别
- [转]C语言math.h库函数中atan与atan2的区别
- gcc编译含math.h程序的奇怪现象(并非未添加-lm)
- gcc 关于math.h编译链接
- 在C语言中使用外部文件里的参数
- C语言标准库--math.h
- C语言标准库--math.h
- a different object with the same identifier value was already associated with the session
- Linux启动流程
- 关于自动旋转
- Android 创建菜单(menu)的总结
- 怎么样上台演讲(结合ppt)。。超级实用。。。
- 如何在linux的gcc中添加c语言的外部链接库(“比如说,math.h"
- java中hashcode()和equal()方法的使用理解
- javascript中本地对象、内置对象和宿主对象
- CFNetwork编程1
- 曲线谜团75!!!
- Python字符串反转的几种方法
- 自定义Data Service Providers — (1)简介
- 做技术的最终出路!
- c# winform 只允许运行一个实例