用C计算复合体的abs值

用C计算复合体的abs值,c,linker-errors,clion,C,Linker Errors,Clion,部分源代码: double _Complex z = 1.0 + 1.0*I; printf("%f\n", cabs(z)); 我的开发环境:Ubuntu16.04LTS,Clion IDE,GCC版本5.4.0,C11标准 当我运行代码时,消息出现了一个错误 undefined reference to `cabs' IDE告诉我函数cabs是在头文件cmathcalls.h中声明的,因此我尝试: #include<cmathcalls.h> #包括 但是IDE警告我找不

部分源代码:

double _Complex z = 1.0 + 1.0*I;
printf("%f\n", cabs(z));
我的开发环境:Ubuntu16.04LTS,Clion IDE,GCC版本5.4.0,C11标准

当我运行代码时,消息出现了一个错误

undefined reference to `cabs'
IDE告诉我函数
cabs
是在头文件
cmathcalls.h
中声明的,因此我尝试:

#include<cmathcalls.h>
#包括
但是IDE警告我找不到该文件,因此我再次尝试:

#include<bits/cmathcalls>
#包括
我运行了代码,但是它仍然不起作用


我想知道如何使用功能
cabs
获取复杂
z
的abs值?

对于您需要的
cabs
。实际上声明它的地方只是一个实现细节


然后使用
-lm
链接以实际链接中的数学库。

在构建可执行文件时,必须链接中的数学库。如何执行此操作因环境而异,但在Linux/Unix中,只需在命令中添加-lm即可:

gcc test.c -o test -lm
数学库名为libm.so,并且-l命令选项采用lib前缀和.a或.so后缀


来源:

try
gcc file.c-lm
。你的意思是“当我编译代码时…”吗?你真的应该仔细看看你的IDE希望在某处显示的编译器、链接器等消息。在这里你可以看到什么是真正失败的。简单点击[Run]有时会包含程序的构建。您是否将库添加到
CMakeLists.txt
target\u link\u libraries(m)
我使用命令行编译代码,添加了'-lm',它可以工作。但是我可以使用IDE使它工作吗@罗通侯君 - 按照说明进行操作。是的,它是有效的。似乎传统的windows上的#include方法在linux上不起作用@罗通侯君 这不是Windows vs Linux,而是特定于编译器的。无论您在Windows中使用什么IDE,它都可能自己跟踪一组标准库,并自动将它们添加到链接步骤中。您在Linux中使用的IDE没有,但这不是因为它是Linux,而是因为IDE就是这样工作的。