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

Web*_*btm 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

cc -lm -o name name.c

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

Dav*_*nan 6

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

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