【发布时间】:2013-01-24 19:55:25
【问题描述】:
我正在尝试使用 Swig for Mac OS X 编译 C++ 扩展。不过,我遇到了一些链接器错误。 Python Swig 的基本教程在 Mac 上似乎也失败了:
http://www.swig.org/Doc1.3/Python.html#Python_nn10
swig -c++ -python example.i
g++ -O2 -fPIC -c example.cxx
g++ -O2 -fPIC -c example_wrap.cxx -I/usr/include/python2.6
g++ -shared example.o example_wrap.o -o _example.so
前三行工作正常。最后一行因链接器错误而失败。我用这个在 OS X 上尝试了最后一行,得到了同样的错误:
g++ -dynamiclib example.o example_wrap.o -o _example.so
最后一行的错误是:
Undefined symbols for architecture x86_64:
"_PyArg_ParseTuple", referenced from:
__wrap_fact in example_wrap.o
"_PyArg_UnpackTuple", referenced from:
_SwigPyObject_own in example_wrap.o
"_PyBool_FromLong", referenced from:
_SwigPyObject_richcompare in example_wrap.o
_SwigPyObject_own in example_wrap.o
...
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
谢谢。
【问题讨论】:
-
-lpython在编译行末尾应该解决链接问题,但 Mac 共享对象具有扩展名.dylib -
谢谢,@Petesh——这行得通!我的主要 Swig 代码(某些函数的未定义符号,我在 swig.i 文件中注释掉)遇到了另一个问题。基本的 Swig 功能现在可以使用了。
-
aaaaand再次关闭有用的线程池罢工。在 Mac 上使用多个基于 SWIG 的库时,这是一个常见且广泛的问题。你为什么要关闭它?!
标签: c++ macos g++ shared-libraries swig