C++ 如何将boost与xeus cling jupyter内核一起使用?

C++ 如何将boost与xeus cling jupyter内核一起使用?,c++,boost,cling,xeus-cling,C++,Boost,Cling,Xeus Cling,我在跑爸爸_操作系统(ubuntu衍生产品)和apt从默认存储库安装了boost(libboost all dev)。我知道它已经正确安装,因为我可以用GCC编译和运行简单的boostodeint示例 然而,当我试图使用zeus cling内核在jupyter笔记本中运行相同的示例时,我在包含odeint头时出错。我可以在执行此代码时重新创建错误: #pragma cling添加包含路径(“/usr/include”) #包括 我收到的错误消息是: 在输入线8:1中包含的文件中: 在/usr/

我在跑爸爸_操作系统(ubuntu衍生产品)和apt从默认存储库安装了boost(libboost all dev)。我知道它已经正确安装,因为我可以用GCC编译和运行简单的boostodeint示例

然而,当我试图使用zeus cling内核在jupyter笔记本中运行相同的示例时,我在包含odeint头时出错。我可以在执行此代码时重新创建错误:

#pragma cling添加包含路径(“/usr/include”)
#包括
我收到的错误消息是:

在输入线8:1中包含的文件中:
在/usr/include/boost/numeric/odeint.hpp:22中包含的文件中:
在/usr/include/boost/numeric/odeint/config.hpp:44中包含的文件中:
在/usr/include/boost/config.hpp:48中包含的文件中:
在/usr/include/boost/config/stdlib/libstdcpp3.hpp中包含的文件中:78:
/usr/include/unistd.h:756:28:错误:函数声明符后应为函数体
外部pid t fork(无效)THROWNL;
^
/usr/include/unistd.h:869:11:致命错误:“未找到bits/getopt_posix.h”文件
#包括
^~~~~~~~~~~~~~~~~~~~~
解释器错误:
据我所知,
bits/getopt_posix.h
是一个仅用于GCC的头,因此我认为问题可能是因为boost头正在配置自己,好像它们是在GCC下编译,而不是在cling/clang下编译


那么,我如何在xeus cling jupyter笔记本中正确地包含boost呢?

我非常绝望,最终找到了以下解决问题的方法

因此,我所做的是将boost super项目作为子模块克隆到我的存储库中,然后添加了使
boost::numeric::odeint
工作所需的所有include路径。Odeint只是头文件,所以它可以工作。这应该适用于所有仅页眉的boost库

我的猜测是,这不是正确的方式,但它对我来说是有效的。这只是为了以后的原型设计和小实验

这里是谐波振荡器的例子

#pragma cling add_include_path("../lib/boost/libs/numeric/odeint/include")
#pragma cling add_include_path("../lib/boost/libs/numeric/ublas/include")
#pragma cling add_include_path("../lib/boost/libs/config/include")
#pragma cling add_include_path("../lib/boost/libs/type_traits/include")
#pragma cling add_include_path("../lib/boost/libs/serialization/include")
#pragma cling add_include_path("../lib/boost/libs/core/include")
#pragma cling add_include_path("../lib/boost/libs/preprocessor/include")
#pragma cling add_include_path("../lib/boost/libs/static_assert/include")
#pragma cling add_include_path("../lib/boost/libs/mpl/include")
#pragma cling add_include_path("../lib/boost/libs/utility/include")
#pragma cling add_include_path("../lib/boost/libs/typeof/include")
#pragma cling add_include_path("../lib/boost/libs/array/include")
#pragma cling add_include_path("../lib/boost/libs/assert/include")
#pragma cling add_include_path("../lib/boost/libs/throw_exception/include")
#pragma cling add_include_path("../lib/boost/libs/units/include")
#pragma cling add_include_path("../lib/boost/libs/integer/include")
#pragma cling add_include_path("../lib/boost/libs/fusion/include")
#pragma cling add_include_path("../lib/boost/libs/range/include")
#pragma cling add_include_path("../lib/boost/libs/iterator/include")
#pragma cling add_include_path("../lib/boost/libs/concept_check/include")
#pragma cling add_include_path("../lib/boost/libs/detail/include")
#pragma cling add_include_path("../lib/boost/libs/function_types/include")
#pragma cling add_include_path("../lib/boost/libs/predef/include")
#pragma cling add_include_path("../lib/boost/libs/math/include")
#pragma cling add_include_path("../lib/boost/libs/lexical_cast/include")
#pragma cling add_include_path("../lib/boost/libs/numeric/conversion/include")
#pragma cling add_include_path("../lib/boost/libs/container/include")
#pragma cling add_include_path("../lib/boost/libs/move/include")
#pragma cling add_include_path("../lib/boost/libs/smart_ptr/include")
#pragma cling add_include_path("../lib/boost/libs/multi_array/include")
#pragma cling add_include_path("../lib/boost/libs/functional/include")
#pragma cling add_include_path("../lib/boost/libs/function/include")
#pragma cling add_include_path("../lib/boost/libs/type_index/include")
#pragma cling add_include_path("../lib/boost/libs/container_hash/include")
#pragma cling add_include_path("../lib/boost/libs/bind/include")


#include <vector>
#include <iostream>
#include "boost/numeric/odeint.hpp"

typedef std::vector< double > state_type;
const double gam = 0.15;

void harmonic_oscillator(const state_type &x , state_type &dxdt , const double t)
{
    dxdt[0] = x[1];
    dxdt[1] = -x[0] - gam*x[1];
}

state_type x(2);
x[0] = 1.0; // start at x=1.0, p=0.0
x[1] = 0.0;

size_t steps = boost::numeric::odeint::integrate(harmonic_oscillator,
                                                 x , 0.0 , 10.0 , 0.1 );

std::cout << steps << std::endl;
#pragma cling add_include_路径(“../lib/boost/libs/numeric/odeint/include”)
#pragma cling add_include_path(“../lib/boost/libs/numeric/ublas/include”)
#pragma cling add_include_path(“../lib/boost/libs/config/include”)
#pragma cling add_include_路径(“../lib/boost/libs/type_traits/include”)
#pragma cling add_include_路径(“../lib/boost/libs/serialization/include”)
#pragma cling add_include_路径(“../lib/boost/libs/core/include”)
#pragma cling add_include_路径(“../lib/boost/libs/preprocessor/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/static\u-assert/include”)
#pragma cling add_include_path(“../lib/boost/libs/mpl/include”)
#pragma cling add_include_path(“../lib/boost/libs/utility/include”)
#pragma cling add_include_path(“../lib/boost/libs/typeof/include”)
#pragma cling add_include_path(“../lib/boost/libs/array/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/assert/include”)
#pragma cling add_include_路径(“../lib/boost/libs/throw_exception/include”)
#pragma cling add_include_路径(“../lib/boost/libs/units/include”)
#pragma cling add_include_path(“../lib/boost/libs/integer/include”)
#pragma cling add_include_path(“../lib/boost/libs/fusion/include”)
#pragma cling add_include_path(“../lib/boost/libs/range/include”)
#pragma cling add_include_path(“../lib/boost/libs/iterator/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/concept\u-check/include”)
#pragma cling add_include_path(“../lib/boost/libs/detail/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/function\u-types/include”)
#pragma cling add_include_path(“../lib/boost/libs/predef/include”)
#pragma cling add_include_path(“../lib/boost/libs/math/include”)
#pragma cling add_include_path(“../lib/boost/libs/lexical_cast/include”)
#pragma cling add_include_path(“../lib/boost/libs/numeric/conversion/include”)
#pragma cling add_include_路径(“../lib/boost/libs/container/include”)
#pragma cling add_include_path(“../lib/boost/libs/move/include”)
#pragma-cling-add_-include_-path(“../lib/boost/libs/smart_-ptr/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/multi\u-array/include”)
#pragma cling add_include_path(“../lib/boost/libs/functional/include”)
#pragma cling add_include_path(“../lib/boost/libs/function/include”)
#pragma cling add_include_路径(“../lib/boost/libs/type_index/include”)
#pragma cling add_include_path(“../lib/boost/libs/container_hash/include”)
#pragma-cling-add\u-include\u路径(“../lib/boost/libs/bind/include”)
#包括
#包括
#包括“boost/numeric/odeint.hpp”
typedef std::vectorstate_type;
常数双gam=0.15;
空谐振荡器(恒态型和x、恒态型和dxdt、恒双t)
{
dxdt[0]=x[1];
dxdt[1]=-x[0]-gam*x[1];
}
状态_类型x(2);
x[0]=1.0;//从x=1.0开始,p=0.0
x[1]=0.0;
size\u t steps=boost::numeric::odeint::integrate(谐波振荡器,
x,0.0,10.0,0.1),;

std::cout我绝望了,结果我的问题得到了以下解决方案

因此,我所做的是将boost super项目作为子模块克隆到我的存储库中,然后添加了使
boost::numeric::odeint
工作所需的所有include路径。Odeint只是头文件,所以它可以工作。这应该适用于所有仅页眉的boost库

我的猜测是,这不是正确的方式,但它对我来说是有效的。这只是为了以后的原型设计和小实验

这里是谐波振荡器的例子

#pragma cling add_include_path("../lib/boost/libs/numeric/odeint/include")
#pragma cling add_include_path("../lib/boost/libs/numeric/ublas/include")
#pragma cling add_include_path("../lib/boost/libs/config/include")
#pragma cling add_include_path("../lib/boost/libs/type_traits/include")
#pragma cling add_include_path("../lib/boost/libs/serialization/include")
#pragma cling add_include_path("../lib/boost/libs/core/include")
#pragma cling add_include_path("../lib/boost/libs/preprocessor/include")
#pragma cling add_include_path("../lib/boost/libs/static_assert/include")
#pragma cling add_include_path("../lib/boost/libs/mpl/include")
#pragma cling add_include_path("../lib/boost/libs/utility/include")
#pragma cling add_include_path("../lib/boost/libs/typeof/include")
#pragma cling add_include_path("../lib/boost/libs/array/include")
#pragma cling add_include_path("../lib/boost/libs/assert/include")
#pragma cling add_include_path("../lib/boost/libs/throw_exception/include")
#pragma cling add_include_path("../lib/boost/libs/units/include")
#pragma cling add_include_path("../lib/boost/libs/integer/include")
#pragma cling add_include_path("../lib/boost/libs/fusion/include")
#pragma cling add_include_path("../lib/boost/libs/range/include")
#pragma cling add_include_path("../lib/boost/libs/iterator/include")
#pragma cling add_include_path("../lib/boost/libs/concept_check/include")
#pragma cling add_include_path("../lib/boost/libs/detail/include")
#pragma cling add_include_path("../lib/boost/libs/function_types/include")
#pragma cling add_include_path("../lib/boost/libs/predef/include")
#pragma cling add_include_path("../lib/boost/libs/math/include")
#pragma cling add_include_path("../lib/boost/libs/lexical_cast/include")
#pragma cling add_include_path("../lib/boost/libs/numeric/conversion/include")
#pragma cling add_include_path("../lib/boost/libs/container/include")
#pragma cling add_include_path("../lib/boost/libs/move/include")
#pragma cling add_include_path("../lib/boost/libs/smart_ptr/include")
#pragma cling add_include_path("../lib/boost/libs/multi_array/include")
#pragma cling add_include_path("../lib/boost/libs/functional/include")
#pragma cling add_include_path("../lib/boost/libs/function/include")
#pragma cling add_include_path("../lib/boost/libs/type_index/include")
#pragma cling add_include_path("../lib/boost/libs/container_hash/include")
#pragma cling add_include_path("../lib/boost/libs/bind/include")


#include <vector>
#include <iostream>
#include "boost/numeric/odeint.hpp"

typedef std::vector< double > state_type;
const double gam = 0.15;

void harmonic_oscillator(const state_type &x , state_type &dxdt , const double t)
{
    dxdt[0] = x[1];
    dxdt[1] = -x[0] - gam*x[1];
}

state_type x(2);
x[0] = 1.0; // start at x=1.0, p=0.0
x[1] = 0.0;

size_t steps = boost::numeric::odeint::integrate(harmonic_oscillator,
                                                 x , 0.0 , 10.0 , 0.1 );

std::cout << steps << std::endl;
#pragma cling add_include_路径(“../lib/boost/libs/numeric/odeint/include”)
#pragma cling add_include_path(“../lib/boost/libs/numeric/ublas/include”)
#pragma cling add_include_path(“../lib/boost/libs/config/include”)
#pragma cling add_include_路径(“../lib/boost/libs/type_traits/include”)
#pragma cling add_include_路径(“../lib/boost/libs/serialization/include”)
#pragma cling add_include_路径(“../lib/boost/libs/core/include”)
#pragma cling add_include_p