gpt4 book ai didi

python - 链接 boost::python::numpy 时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:57 28 4
gpt4 key购买 nike

我写了一个小例子来说明发生了什么。

我的测试.cpp

#include <iostream>
#include <boost/python/numpy.hpp>
namespace np = boost::python::numpy;
int my_Foo()
{
Py_Initialize();
np::initialize();
std::cout << "hello\n";
return 0;
}
BOOST_PYTHON_MODULE(my_test)
{
using namespace boost::python;
def("my_Foo", my_Foo);
}

py_test.py

import my_test as t
t.my_Foo();

我用命令编译所有:

g++ -shared -fPIC -o my_test.so my_test.cpp -lboost_python -lpython2.7 -I/usr/include/python2.7

我得到这个错误:

ImportError: /home/my_test.so: undefined symbol: _ZN5boost6python5numpy10initializeEb

当我评论这一行时它有效

//np::initialize();

我不知道如何修复它。我在论坛上读过类似的问题,但没有一个解决方案对我有帮助。我尝试了更新 boost 、更新 python、链接库、在编译期间将生成的模块放在其他模块之前——没有任何帮助。如果有任何帮助,我将不胜感激。

最佳答案

论仿生-lboost_python 是不够的。您缺少 -lboost_numpy

在 Xenial 上您还找不到预构建的库:

sudo apt -y install libpython2.7-dev libboost-python-dev
git clone https://github.com/ndarray/Boost.NumPy
cd Boost.Numpy
mkdir build
cd build
cmake ..
make
sudo make install

将代码中的 boost/python/numpy.hpp 替换为 boost/numpy.hpp 也替换 namespace np = boost::python::numpy with namespace np = boost::numpy; |

g++ -o test5.so -fPIC -shared test5.cpp -lboost_python -lboost_numpy -I/usr/local/include -I/usr/include/x86_64-linux-gnu/python2.7/ -I/usr/include/python2.7
enter code here

~> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64 ldd test5.so
linux-vdso.so.1 => (0x00007ffe9cd36000)
libboost_python-py27.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0 (0x00007ffba47bd000)
libboost_numpy.so => /usr/local/lib64/libboost_numpy.so (0x00007ffba45a2000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffba4216000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffba3ffe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffba3c34000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffba3a17000)
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007ffba3489000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffba3180000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffba4c11000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffba2f66000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffba2d62000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007ffba2b5f000)

关于python - 链接 boost::python::numpy 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51037886/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com