【问题标题】:Boost compilation error on Mac using PCL使用 PCL 在 Mac 上提升编译错误
【发布时间】:2016-12-31 18:06:50
【问题描述】:

我已经在我的 MacBook 上使用自制软件安装了 PCL。我还有一些要编译的代码,我已经为其创建了一个 CMakeLists.txt 文件。但是,我收到一些关于 boost 库的错误。

我得到错误:

/usr/local/include/boost/random/detail/polynomial.hpp:267:13: error: use of undeclared identifier 'sqr'; did you mean 'sqrt'? sqr(out, n);

当我查看文件 polynomial.hpp 时,我可以看到以下函数:

    static digit_t sqr(digit_t val) {
    const std::size_t bits = std::numeric_limits<digit_t>::digits;
    digit_t mask = (digit_t(1) << bits/2) - 1;
    for(std::size_t i = bits; i > 1; i /= 2) {
        val = ((val & ~mask) << i/2) | (val & mask);
        mask = mask & (mask >> i/4);
        mask = mask | (mask << i/2);
    }
    return val;
}

static void sqr(digit_t * val, std::size_t size)
{
    const std::size_t bits = std::numeric_limits<digit_t>::digits;
    digit_t mask = (digit_t(1) << bits/2) - 1;
    for(std::size_t i = 0; i < size; ++i) {
        digit_t x = val[size - i - 1];
        val[(size - i - 1) * 2] = sqr(x & mask);
        val[(size - i - 1) * 2 + 1] = sqr(x >> bits/2);
    }
}

在导致问题的函数调用上方声明。

由于这些函数似乎存在,而且是 Boost 库中的代码导致了问题,我有点不确定如何继续。

我在 Linux 上没有遇到过这些问题,尽管那是针对 PCL 1.7 而这是 PCL 1.8。

/埃里克

【问题讨论】:

    标签: macos boost point-cloud-library


    【解决方案1】:

    这里有类似的问题(Ubuntu 16.04,PCL 1.8)。错误是

    /usr/include/boost/random/detail/polynomial.hpp:190: error: macro "sqr" passed 2 arguments, but takes just 1
     static void sqr(digit_t * val, std::size_t size)
                                                    ^
    

    认为这是相关的。

    【讨论】:

      【解决方案2】:

      我通过将 polynomial.hpp 中的 sqr 更改为 (sqr) 解决了这个问题。这可能是 Linux 或 Mac 中的宏引起的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-23
        • 2012-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多