需要在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
实现,因此它确实需要在库中实现。