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

Undefined symbols for architecture x86_64 while trying to use swig to wrap c++ library to Python

我正在尝试使用 swig 在 Python 中包装一个 c++ class。我使用 swig 编译了 class 并生成了 .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

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

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

顺便说一句,这与 python 的 SWIG 或换行无关。