各位老哥帮忙看看
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;试试使用以下命令:
gcc -o 14 14.c -lm linux下,使用math.h的时候,不能这么简单的gcc
需要在gcc yoursourcefile.c 的时候加上' -lm' ,
"gcc -lm yoursourcefile.c" 编译通过,应该就可以了 gcc -lm -o l4.out sunrise085 发表于 2021-2-2 21:42
linux下,使用math.h的时候,不能这么简单的gcc
需要在gcc yoursourcefile.c 的时候加上' -lm' ,
"gcc - ...
还是不行啊?
人中仙 发表于 2021-2-3 11:55
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:
还是不行 人中仙 发表于 2021-2-3 11:55
gcc在链接过程中是从左到右扫描的,故参数-lm要放在命令的最后;
试试使用以下命令:
这些应该放中间吧 本帖最后由 人中仙 于 2021-2-4 13:07 编辑
yzc123 发表于 2021-2-3 19:59
还是不行
我在我的电脑上试了一下是可以的,运行情况如下:
代码片段:
#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
client_2233 发表于 2021-2-3 20:53
这些应该放中间吧
我试了一下,这一个程序放中间是可以编译的,但是一般来说应该放在末尾。
特别注意,必须把-lm放在后面。放在最后时它是这样的一个解析过程:
链接器从左往右扫描可重定位目标文件和静态库
扫描main.o时,发现一个未解析的符号exp,记住这个未解析的符号
扫描libm.a,找到了前面未解析的符号,因此提取相关代码
最终没有任何未解析的符号,编译链接完成
参考:一文带你了解静态库和动态库 人中仙 发表于 2021-2-4 12:48
我在我的电脑上试了一下是可以的,运行情况如下:
代码片段:
那我那个为啥不行?
yzc123 发表于 2021-2-4 14:57
那我那个为啥不行?
是不是环境出了问题?到目录下面看看有没有 libm.a 这个库文件。
附:Linux下gcc安装与配置 人中仙 发表于 2021-2-4 12:57
我试了一下,这一个程序放中间是可以编译的,但是一般来说应该放在末尾。
好的 谢谢指教
页:
[1]