gcc 使用正弦和 boost:interval 编译错误

Posted

技术标签:

【中文标题】gcc 使用正弦和 boost:interval 编译错误【英文标题】:gcc compile error with sine and boost:interval 【发布时间】:2018-02-22 12:30:28 【问题描述】:

我需要在安装了 gcc/g++ (7.2.0) 和 boost (1.66) 的 linux (CentOs 6.7) 服务器上运行一些代码(编辑: 不仅是 1.66,还有更旧的升压版本受到干扰。保持你的机器清洁)。我用这样的策略指定了我的间隔类型:

// test.cpp
#include <boost/numeric/interval.hpp>   

namespace bn = boost::numeric;
namespace bi = bn::interval_lib;

using Interval = bn::interval<
      double,
      bi::policies<
          bi::save_state<bi::rounded_transc_std<double> >,
          bi::checking_base<double>
      >
  >;

现在我想做一些简单的计算,比如:

// still test.cpp
int main() 

    Interval iv_arg 1.0;
    Interval res = sin(iv_arg);

在我的本地机器上,使用 clang 编译的 mac 工作得非常好。但是,一旦我尝试在服务器上运行它,使用g++ -std=c++11 test.cpp 进行编译,我就会收到错误消息:

/usr/include/boost/numeric/interval/rounded_arith.hpp:71:59: 错误: 'to_int' 未在此范围内声明,也没有声明 在实例化点通过依赖于参数的查找找到 [-fpermissive] T int_down(const T& x) this->downward();返回 to_int(x); ~~~~~~^~~ /usr/include/boost/numeric/interval/rounded_arith.hpp:71:59: 注意: 依赖库中的声明 'boost::numeric::interval_lib::detail::c99_rounding' 未被找到 不合格的查找 /usr/include/boost/numeric/interval/rounded_arith.hpp:71:59:注意:使用 'this->to_int' 代替

还有一些似乎与主题无关的信息,但如果可能有帮助,我可以将其包含在内。我试着用谷歌搜索了一下,但找不到任何相关的东西。如果可能的话,我想找到一个不需要对服务器进行任何更改的解决方案。有没有人有想法或遇到过类似的问题?

【问题讨论】:

显示exact编译命令,并提供一些minimal reproducible example @BasileStarynkevitch 添加了编译命令。关于我的示例,什么不是最小的、完整的或可验证的? 不,你确实给了minimal reproducible example(如果两个代码块放在一起) 顺便说一句,你确定你只有一个版本的 boost 吗?您是否与-H(传递给g++clang++)核对相同 boost/numeric/interval.hpp 是否包含在这两种情况下?什么版本的 Boost? @BasileStarynkevitch 这似乎确实是问题所在,可能有多个版本的 boost。我刚刚在那里找到了 1.41 版,并加上了 sehes 的答案,这不会编译。谢谢 【参考方案1】:

编译它的第一个版本是 1.58

boost 1.57错误 boost 1.58好的

【讨论】:

以上是关于gcc 使用正弦和 boost:interval 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

N Boost interval_set 的组合

将函数限制为特定数据类型的正确方法

使用神经网络和 ReLU 逼近正弦函数

巧用ASIN函数计算反正弦值

如何使用 pylab 和 numpy 将正弦曲线拟合到我的数据中?

同时绘制正弦和余弦曲线