【问题标题】:Using sqrtf() in C: "undefined reference to `sqrtf'"在 C 中使用 sqrtf():“未定义的对 `sqrtf' 的引用”
【发布时间】:2013-06-03 04:53:40
【问题描述】:

我正在使用 Linux、Ubuntu 12.04(Precise Pangolin)和 Geany 进行编码。在我使用 sqrtf 命令找到浮点数的平方根之前,我用 C 编写的代码运行良好。

错误:HAC3.c:(.text+0xfd7): undefined reference to `sqrtf'。

我使用 sqrtf() 的部分代码:

float syn(float *a, float *b, int dimensions)
{
    float similarity=0;
    float sumup=0;
    float sumdown=0;
    float as=0;
    float bs=0;
    int i;
    for(i=0; i<dimensions; i++)
    {
        sumup = sumup + a[i] * b[i];
        as = as + a[i] * a[i];
        bs = bs + b[i] * b[i];
    }
    sumdown = sqrtf(as) * sqrtf(bs);
    similarity = sumup / sumdown;
    return similarity;
}

我包含了 math.h,但这似乎不是问题。

有没有办法修复 Geany,这样就不会再出现这种情况了?

【问题讨论】:

  • sqrtf 自 c99.和链接器选项。例如gcc prog.c -std=c99 -lm
  • 供将来参考:如果某些内容无法编译/链接:请查看 man -k ,在您的情况下 man -k sqrtf ...它会告诉你如何使用它。
  • 什么是man -k sqrtf?
  • man -k 是更简洁的 apropos 形式。你肯定不是在问什么是手册页​​,对吧?

标签: c linux math.h geany


【解决方案1】:

转到Build -> Set Build Commands 然后在C commands 下单击空标签,它将让您指定一个新标签(将其命名为Link)。输入gcc -Wall -o "%e" "%f" -lm - 其中-lm 将告诉它将math 库链接到您的应用程序。点击OK

然后单击Build 并选择您新创建的标签-Link。这应该会为您完成。

【讨论】:

  • 这是我问题的完美答案。谢谢楼主:)
  • 很高兴我能帮上忙 :)
  • 请注意,必须在文件之后指定 -lm 标志。我有一个错误导致的错误。
【解决方案2】:

您需要链接-lm 以提供数学函数。

【讨论】:

  • 如何在 geany 中准确链接 -lm?对不起,我的知识很少
【解决方案3】:

除了这里有很多很好的答案,支持&lt;math.h&gt;的C99版本的命令的可移植形式是specified by POSIX作为c99 -l m。话虽如此,每个重要的 Linux 编译器都支持-lm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多