我正在尝试使用此链接http://processors.wiki.ti.com/index.php/WL18xx_System_Build_Scripts中的说明编译和构建一组特定的无线驱动程序

当我安装几个模块时,这是我得到的错误,

/root/build-utilites/fs/lib/libnl-3.a(utils.o): In function `nl_prob2int':
/root/build-utilites/src/libnl/lib/utils.c:378: undefined reference to `lrint'
collect2: ld returned 1 exit status
make: *** [all] Error 1
****** ERROR 0 *******

这就是函数nl_prob2int(在/root/build-utilites/src/libnl/lib/中)的样子,
    long nl_prob2int(const char *str)
    {
            char *p;
            double d = strtod(str, &p);

            if (p == str)
                    return -NLE_INVAL;

            if (d > 1.0)
                    d /= 100.0f;

        if (d > 1.0f || d < 0.0f)
                return -NLE_RANGE;

        if (*p && strcmp(p, "%") != 0)
                return -NLE_INVAL;

        return rint(d * NL_PROB_MAX);
}

utils.c代码中包含以下库
#include <netlink-private/netlink.h>
#include <netlink/netlink.h>
#include <netlink/utils.h>
#include <linux/socket.h>
#include <stdlib.h> /* exit() */
#include <math.h>

最佳答案

libnl取决于libm,但是在链接器命令行中它们的顺序不正确。 (-lnl应该在-lm之前)。

但是,这仅在较新版本的GCC中得以体现。...在链接程序命令行中可能带有“-Wl,-as-needed”标志。去掉它。

关于compiler-errors - 对lrint的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33896905/

10-12 05:51