我已经安装Boost.Numpylibboost-all-dev
在 Ubuntu 14.04 上的 Boost 1.54( )。
此版本的 Numpy 将库安装在一个结构中,您可以在 C++ 中像这样调用它:
#include <boost/numpy.hpp>
预装了 Numpy 的较新版本的 Boost(即 Boost 1.64+)使用不同的结构,其格式如下:
#include <boost/python/numpy.hpp>
似乎Boost.NumpyBoost 1.58 与假定 Numpy 通过较新版本的 Boost(即boost/python/numpy.hpp
)安装的代码不兼容。
我有一些代码,比如说包 A,(由于某种原因不能与 Boost 1.64 一起使用),它使用 Boost 1.54 和一些其他软件,比如说包 B,我从源代码构建,需要 Boost 和 Numpy(并且它们的代码假定boost/python/numpy.hpp
)。
我想让这两者兼容,所以我只能想到两个解决方案:
- 修改包 B 中的每个代码,并将定义更改
#include <boost/python/numpy.hpp>
为<#include <boost/numpy.hpp>
(虽然我不确定这是否能 100% 解决问题) - 将我的系统中的所有 Numpy 文件从原来的位置移到包 B 处
boost/python
,以便它们与包 B 兼容(因为包 A 不需要 Numpy)。
我不确定这两种解决方案是否合适,或者是否有更好的方法?我目前处于全新安装状态,我不想破坏任何东西。
不幸的是,我也尝试用 Boost 1.64 构建包 B,用 Boost 1.54 构建包 A,但这两个包互相通信,我发现这两个包的 Boost 版本不同会导致分段错误,所以我绝对需要避免这种解决方案。
答案1
由于您不想升级到 18.04 LTS,所以我们继续使用 14.04 LTS。
但创建 Ubuntu 18.04 LTS施鲁特在这里使用新的 Boost:
sudo apt-get install schroot debootstrap -y
cat <<EOF | sudo tee /etc/schroot/chroot.d/bionic.conf
[bionic]
description=Ubuntu 18.04
directory=/srv/chroot/bionic
root-users=$USER
type=directory
users=$USER
EOF
sudo mkdir -p /srv/chroot/bionic
sudo debootstrap bionic /srv/chroot/bionic
cat <<EOF | sudo tee /srv/chroot/bionic/etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
EOF
schroot -c bionic -u root apt-get update
schroot -c bionic -u root apt-get install software-properties-common sudo
schroot -c bionic -u root apt-get install libboost1.65-dev
当您想要编译 Boost-NumPy 内容时,不要忘记将 root 更改为此 chroot:
schroot -c bionic
执行此命令后,命令提示符将从 变为user@host:~$
,(bionic)user@host:~$
您可以在此 shell 内运行编译。
我之前用其他应用程序测试过这种方法。
目前我在 16.04 LTS 中安装了 12.04 LTS(现已停产)schroot,用于一些开发任务。