需要在clang中使用-lm和pow(),但不能在sqrt()中使用

在FreeBSD 10.1和使用Clang 3.4.1

现在我已经看到其他线程询问如何使用pow()进行编译 ,但我没有看到有这个问题的线程。 举个例子:

 #include  #include  int main() { float result; result = pow(2,3); printf("%d", result); return 0; } 

现在使用pow() ,我需要发出clang参数-lm。

cc -lm -o name name.c

但是,用sqrt(5);代替pow(2,3) sqrt(5); ,我可以使用cc -o name name.c进行编译。 如果他们都使用math.h ,那为什么pow()需要链接到库? 方面没有:安装gcc进行测试,我根本不需要使用-lm。

您的目标是浮点硬件直接实现sqrt的处理器,所有符合IEEE-754标准的设备都是如此。 因此,编译器可以直接为sqrt生成代码,而不需要链接到库函数。

另一方面,浮点硬件通常不提供pow实现,因此它确实需要在库中实现。