包含math.h和链接libm时,C sinhl未定义引用

时间:2013-12-08 21:36:02

标签: c gcc math.h libm

希望有人以前见过这个并且可以提供一些见解。

我包括math.h和链接libm,在FreeBSD 9.2 x86_64上使用gcc 4.2.1。

像sinl,cosl,tanl这样的函数工作,但是一旦我调用sinhl之类的东西,我就会收到关于内置的隐式声明和未定义引用的错误的警告。

相关标题部分:

#include <math.h>
#include <stdlib.h>

// ....

long double function0(long double inValue)
{
    // Sine long double == sinl
    return sinl(inValue);
}

// ....

long double function3(long double inValue)
{
    // Hyperbolic Sine long double == sinhl
    return sinhl(inValue);
}

Makefile Stuff:

all:
        gcc -o test test.c -lm

编译尝试导致:

function_references.h: In function 'function3':
function_references.h:39: warning: incompatible implicit declaration of built-in function 'sinhl'
/tmp//ccSpynxE.o: In function `function3':
test.c:(.text+0x98): undefined reference to `sinhl'

我检查了math.h,并且sinl和sinhl都以相同的方式列出。只是为了笑容,我尝试连接到32位版本的libm,这让我无处可去。

有趣的是,如果我查看/usr/include/libm.a中的符号,我会看到sinl的内容,但对于sinhl来说却没有。我是否需要链接其他库以使用双曲线触发函数?

在过去的24小时里,我一直在喋喋不休,没有看到任何明显的东西。我也遇到了同样的问题:coshl,tanhl,logl,log2l,log10l,expl。

来自新鲜眼睛的任何想法?

提前谢谢你。   -T

1 个答案:

答案 0 :(得分:1)

@Giovanni Lombardo:感谢您让我思考完全从操作系统中遗漏的功能。非常感谢。

解决方案是安装&#34; libmissing&#34;缺少数学函数。

对于碰到它的任何其他人:

  • 安装/ usr / ports / math / libmissing

  • 将miss_math.h的#include添加到您的代码中。

  • 更新Makefile以包含libmissing的路径和链接:
    gcc -I / usr / local / include -L / usr / local / lib -o test test.c -lm -lmissing