gcc -lm 选项
来源:互联网 发布:决策树源码 编辑:程序博客网 时间:2024/06/05 03:58
今天看到书上出现gcc -lm 的选项,甚是不解,在网上查阅了一些资料,访问了一些论坛整理下。
初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to 'sqrt'。
像 sqrt(3.0); 这种调用,gcc 在编译时就可以将其替换为对应的值(gcc 优化的一部分),从而不需要链接 sqrt 所在的数学库 libm;而像 sqrt(n); 这种调用,一般无法做这种替换,因此需要链接 libm。
编译的时候,链接 数学库, -lptread 链接线程库等等,也可以使自己编译的库
Question: 编译程序时得到undefined reference to 'xxxx'这样的错误提示
Answer: 那你一定是缺少某个库,用 -l参数将库加入。Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及"."后面的so,la,a等即可。 因为数学函数位于libm.so库文件中(通常在/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找.
同时,常见的库链接方法为:
数学库 -lm ; posix线程 -lpthread
lc 是link libc
lm 是link libm
初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to 'sqrt'。
像 sqrt(3.0); 这种调用,gcc 在编译时就可以将其替换为对应的值(gcc 优化的一部分),从而不需要链接 sqrt 所在的数学库 libm;而像 sqrt(n); 这种调用,一般无法做这种替换,因此需要链接 libm。
编译的时候,链接 数学库, -lptread 链接线程库等等,也可以使自己编译的库
Question: 编译程序时得到undefined reference to 'xxxx'这样的错误提示
Answer: 那你一定是缺少某个库,用 -l参数将库加入。Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及"."后面的so,la,a等即可。 因为数学函数位于libm.so库文件中(通常在/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找.
同时,常见的库链接方法为:
数学库 -lm ; posix线程 -lpthread
lc 是link libc
lm 是link libm
lz 是link libz
举例:gcc -o text text.c -lm
0 0
- gcc -lm 选项
- GCC -lm 的原理
- GCC -lm 是什么意思
- gcc - lm的含义
- gcc -lm 是什么意思?
- GCC -lm 是什么意思
- Gcc选项
- GCC 选项
- GCC 选项
- gcc 选项
- gcc选项
- gcc选项
- gcc 选项
- 【gcc】gcc常用选项
- lm
- gcc编译时,math.h需要加-lm
- gcc选项介绍
- gcc选项介绍
- jquery.validate使用攻略
- 详解正则表达式
- 1013. Battle Over Cities (25)
- 【一图流】_01_一张图看懂 Android 系统的开机流程:
- 从jvm的角度来看单例模式
- gcc -lm 选项
- eclipse如何设置自动去除多余引入的类?
- 四种类型转换
- canvas的宽度设置
- 树的层次遍历【队列的应用】
- 《Java高并发程序设计》总结--5. 并行模式与算法
- react native搭建私有热更新服务器
- Java 多态
- 关于ibatis的总结