通过 Boost.Numpy 安装的 Boost 与新版本不兼容

通过 Boost.Numpy 安装的 Boost 与新版本不兼容

我已经安装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)。

我想让这两者兼容,所以我只能想到两个解决方案:

  1. 修改包 B 中的每个代码,并将定义更改#include <boost/python/numpy.hpp><#include <boost/numpy.hpp>(虽然我不确定这是否能 100% 解决问题)
  2. 将我的系统中的所有 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,用于一些开发任务。

相关内容