带你学C带你飞第7课,gcc -lm test.c && ./a.out中间为什么加-lm
图片上传不了真尴尬。程序我是一摸一样抄下来的,然后我输出是
gcc test.c && ./a.out 没问题,也试了一下
gcc -lm test.c && ./a.out 没问题,也试了一下
gcc test.c -o test
./test 没问题 最后试了一下
gcc -lm test.c -o test
./test 没问题
视频里说这个是调用math.h这个函数库,如果我没用-lm就是没有调用,应该是报错或者输出异常才对,怎么正常了 本帖最后由 jackz007 于 2020-2-2 00:49 编辑
"math.h" 是头文件,不是数学库,对 Linux 系统而言,所谓的数学库指的是 "libm.so",是操作系统提供的一个动态库,类似于 Windows 系统的 dll 文件。
如果在代码中用到了 C 语言提供的数学函数,例如:pow()、sqrt() 、sin()、tan() 等,就必须在代码开头包含头文件 "math.h",在代码编译的时候,必须添加 -lm 选项,否则,一定会出错。
如果在代码中并没有使用到 C 语言的数学库函数,在代码开头也可以包含头文件 "math.h",在代码编译的时候,也同样可以使用 -lm 选项,难道有什么问题吗?
如果在 Windows 下使用 DEV-C++,其他要求都和 Linux 系统完全一样,只是编译的时候,完全不需要添加 -lm 选项。 jackz007 发表于 2020-2-2 00:40
"math.h" 是头文件,不是数学库,对 Linux 系统而言,所谓的数学库指的是 "libm.so",是操作系统提供 ...
引用一下你的话“如果在代码中用到了 C 语言提供的数学函数,例如:pow()、sqrt() 、sin()、tan() 等,就必须在代码开头包含头文件 "math.h",在代码编译的时候,必须添加 -lm 选项,否则,一定会出错。”
用的linux系统,gcc test.c -o test编译没报错,只有溢出警告,然后执行./test,输出也正常,为什么,没有加-lm,你不是说一定会出错吗 a86116403 发表于 2020-2-2 13:53
引用一下你的话“如果在代码中用到了 C 语言提供的数学函数,例如:pow()、sqrt() 、sin()、tan() 等,就 ...
关键是,你在代码中用数学函数了吗? jackz007 发表于 2020-2-2 14:58
关键是,你在代码中用数学函数了吗?
用了,pow,我程序是抄下来的
jackz007 发表于 2020-2-2 14:58
关键是,你在代码中用数学函数了吗?
#include<stdoo.h>
#include<math.h>
int main()
{
int result =pow(2,32)-1;
printf("result=%d",result);
return 0;
}
源代码文件是test.c,用gcc编译
gcc test.c -o tset 编译通过,警告溢出
执行编译后文件
./test
输出到页面
result= 2147483647
jackz007 发表于 2020-2-2 14:58
关键是,你在代码中用数学函数了吗?
#include<stdoo.h>
#include<math.h>
int main()
{
int result =pow(2,32)-1;
printf("result=%d",result);
return 0;
}
源代码文件是test.c,用gcc编译
gcc test.c -o tset 编译通过,警告溢出
执行编译后文件
./test
输出到页面
result= 2147483647
页:
[1]