尝试使用 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 或换行无关。
我正在尝试使用 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 或换行无关。