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

时间:2015-08-12 20:09:10

标签: c clang

在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()需要链接到库? 方面没有:安装gcc进行测试,我根本不需要使用-lm。

1 个答案:

答案 0 :(得分:5)

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

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