尝试使用swig将c ++库包装到Python时,架构x86_64的未定义符号

时间:2015-12-15 13:55:56

标签: python c++ swig

我正在尝试使用swig在Python中包装c ++类。我编译了类并使用swig生成了.o文件和包装文件,但是现在当我尝试从文件创建库时,我收到以下错误。

$g++ -lpython -dynamiclib vertex.o vertex_wrap.o -o _vertex.so
Undefined symbols for architecture x86_64:
  "Cell::removeVertex(Vertex*)", referenced from:
      Vertex::kill(Vertex*) in vertex.o
      Vertex::~Vertex() in vertex.o
      Vertex::~Vertex() in vertex.o
  "Cell::addVertex(Vertex*)", referenced from:
      Vertex::make(Cell*) in vertex.o
      Vertex::Vertex(Cell*) in vertex.o
      Vertex::Vertex(Cell*) in vertex.o
ld: symbol(s) not found for architecture x86_64

1 个答案:

答案 0 :(得分:1)

Vertex拨打Cell(可能,Vertex通常包含在Cell中),即Cell::removeVertex(Vertex*)Cell::addVertex(Vertex*) }。这些函数必须在其他一些源文件中定义(也许cell.cpp,只是猜测)。

所以你需要编译源文件cell.cpp和链接cell.o(如果有更多依赖项,可能还有其他源文件)

顺便说一句,这与SWIG或python包装无关。