使用Boost/Python的未定义符号

Undefined symbol using Boost/Python

本文关键字:未定义 符号 Python Boost 使用      更新时间:2023-10-16

使用boost 1.63.0,我已经编码以下内容:
vectors.cpp

/* Boost/Python headers */ 
#include<boost/python/module.hpp>
#include<boost/python/def.hpp>
#include<boost/python/extract.hpp>
#include<boost/python/numpy.hpp>
#include<cmath>
using namespace boost::python;
namespace np = boost::python::numpy;
double eucnorm(np::ndarray axis){
  const int n = axis.shape(0);
  double norm = 0.0;
  for(int i = 0; i < n; i++){
    double A = boost::python::extract<double>(axis[i]);
    norm += A*A;
  }
  return sqrt(norm);
}
BOOST_PYTHON_MODULE(vectors){
  def("eucnorm", eucnorm);
}

我已经使用:
对此进行了编译 g++ -shared -fpic -I /usr/include/python2.7 -I /foo/bar/boost_1_63_0 -lboost_python -o vectors.so

导入时我会收到以下错误:

from vectors import *
ImportError: ./vectors.so: undefined symbol: _ZN5boost6python9converter21object_manager_traitsINS0_5numpy7ndarrayEE10get_pytypeEv

这是什么意思,我该如何修复?

add:

-lboost_numpy -lboost_python 

构建.so。

顺便说一句,如果您想在构建时间找出此类问题(而不是必须在Python中尝试import):强制GCC在共享库中通知有关未定义的参考