鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 6

[已解决]带你学C带你飞第7课,gcc -lm test.c && ./a.out中间为什么加-lm

[复制链接]
发表于 2020-2-1 21:45:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
图片上传不了真尴尬。
程序我是一摸一样抄下来的,然后我输出是

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就是没有调用,应该是报错或者输出异常才对,怎么正常了
最佳答案
2020-2-2 00:40:47
本帖最后由 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 选项。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-2 00:40:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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 选项。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-2 13:53:08 | 显示全部楼层
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,你不是说一定会出错吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 14:58:57 | 显示全部楼层
a86116403 发表于 2020-2-2 13:53
引用一下你的话“如果在代码中用到了 C 语言提供的数学函数,例如:pow()、sqrt() 、sin()、tan() 等,就 ...

     关键是,你在代码中用数学函数了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 16:46:57 | 显示全部楼层
jackz007 发表于 2020-2-2 14:58
关键是,你在代码中用数学函数了吗?

用了,pow,我程序是抄下来的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 16:54:38 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 16:55:24 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表