鱼C论坛

 找回密码
 立即注册
查看: 2215|回复: 11

[已解决]各位老哥帮忙看看

[复制链接]
发表于 2021-2-2 21:05:48 | 显示全部楼层 |阅读模式
10鱼币
最佳答案
2021-2-2 21:05:49
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:
gcc -o 14 14.c -lm
QQ图片20210202210430.png
QQ图片20210202210443.png

最佳答案

查看完整内容

gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后; 试试使用以下命令:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-2 21:05:49 | 显示全部楼层    本楼为最佳答案   
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:
gcc -o 14 14.c -lm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-2 21:42:55 | 显示全部楼层
linux下,使用math.h的时候,不能这么简单的gcc
需要在gcc yoursourcefile.c 的时候加上' -lm' ,
"gcc -lm yoursourcefile.c" 编译通过,应该就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-2 21:58:19 | 显示全部楼层
gcc -lm -o l4.out
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-3 08:32:07 | 显示全部楼层
sunrise085 发表于 2021-2-2 21:42
linux下,使用math.h的时候,不能这么简单的gcc
需要在gcc yoursourcefile.c 的时候加上' -lm' ,
"gcc - ...

还是不行啊?
QQ图片20210203083051.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-3 19:59:58 | 显示全部楼层
人中仙 发表于 2021-2-3 11:55
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:

还是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-3 20:53:43 | 显示全部楼层
人中仙 发表于 2021-2-3 11:55
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:

这些应该放中间吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 12:48:56 | 显示全部楼层
本帖最后由 人中仙 于 2021-2-4 13:07 编辑


我在我的电脑上试了一下是可以的,运行情况如下:

代码片段:
#include <stdio.h>
#include <math.h>

int main(){
    double a,b,c,area,s;
    a=3.67;
    b=5.43;
    c=6.21;
    s = (a+b+c)/2;;
    area = sqrt(s*(s-a)*(s-b)*(s-c));
    printf("a=%f\tb=%f\tc=%f\n",a,b,c);
    printf("area=%f\n",area);
    return 0;
}

命令行运行:
PS D:\WorkSpace\VSCode\14> gcc -o 14 14.c -lm
PS D:\WorkSpace\VSCode\14> .\14 

命令行输出:
a=3.670000      b=5.430000      c=6.210000
area=9.903431

运行后截图

运行后截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 12:57:50 | 显示全部楼层
client_2233 发表于 2021-2-3 20:53
这些应该放中间吧

我试了一下,这一个程序放中间是可以编译的,但是一般来说应该放在末尾。

特别注意,必须把-lm放在后面。放在最后时它是这样的一个解析过程:

链接器从左往右扫描可重定位目标文件和静态库

扫描main.o时,发现一个未解析的符号exp,记住这个未解析的符号

扫描libm.a,找到了前面未解析的符号,因此提取相关代码

最终没有任何未解析的符号,编译链接完成


参考:一文带你了解静态库和动态库
屏幕截图 2021-02-04 124745.png
屏幕截图 2021-02-04 125708.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-4 14:57:12 | 显示全部楼层
人中仙 发表于 2021-2-4 12:48
我在我的电脑上试了一下是可以的,运行情况如下:

代码片段:

那我那个为啥不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 15:07:43 | 显示全部楼层
yzc123 发表于 2021-2-4 14:57
那我那个为啥不行?

是不是环境出了问题?到目录下面看看有没有 libm.a 这个库文件。

附:Linux下gcc安装与配置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 22:03:41 | 显示全部楼层
人中仙 发表于 2021-2-4 12:57
我试了一下,这一个程序放中间是可以编译的,但是一般来说应该放在末尾。

好的 谢谢指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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