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 编译错误的主要内容,如果未能解决你的问题,请参考以下文章