需要在 Clang 中使用 -lm 和 pow(),而不是 sqrt()
Need to use -lm in Clang with pow(), but not sqrt()
在 FreeBSD 上 10.1
并使用 Clang 版本 3.4.1
现在我看到其他线程询问如何使用 pow() 进行编译,但我还没有看到有这个问题的线程。举个例子:
#include <math.h>
#include <stdio.h>
int main()
{
float result;
result = pow(2,3);
printf("%d", result);
return 0;
}
现在使用 pow()
,我需要发出 clang 参数 -lm。
cc -lm -o name name.c
但是,将 pow(2,3)
替换为 sqrt(5);
,我可以使用 cc -o name name.c
进行编译。如果他们都使用 math.h
,那么为什么 pow()
需要链接到图书馆?
Side not: 安装了 gcc 来测试,我根本不需要使用 -lm。
您的目标是其浮点硬件直接实现 sqrt
的处理器,所有 IEEE-754 兼容单元也是如此。因此,编译器可以直接为 sqrt
生成代码,而不需要 link 到库函数。
另一方面,浮点硬件通常不提供 pow
的实现,因此它确实需要在库中实现。
在 FreeBSD 上 10.1
并使用 Clang 版本 3.4.1
现在我看到其他线程询问如何使用 pow() 进行编译,但我还没有看到有这个问题的线程。举个例子:
#include <math.h>
#include <stdio.h>
int main()
{
float result;
result = pow(2,3);
printf("%d", result);
return 0;
}
现在使用 pow()
,我需要发出 clang 参数 -lm。
cc -lm -o name name.c
但是,将 pow(2,3)
替换为 sqrt(5);
,我可以使用 cc -o name name.c
进行编译。如果他们都使用 math.h
,那么为什么 pow()
需要链接到图书馆?
Side not: 安装了 gcc 来测试,我根本不需要使用 -lm。
您的目标是其浮点硬件直接实现 sqrt
的处理器,所有 IEEE-754 兼容单元也是如此。因此,编译器可以直接为 sqrt
生成代码,而不需要 link 到库函数。
另一方面,浮点硬件通常不提供 pow
的实现,因此它确实需要在库中实现。