【问题标题】:Compiling C++ with SWIG on Mac OS X [closed]在 Mac OS X 上使用 SWIG 编译 C++ [关闭]
【发布时间】: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


【解决方案1】:

为了完整——感谢Petesh。

swig -c++ -python example.i
g++ -O2 -fPIC -c example.cxx
g++ -O2 -fPIC -c example_wrap.cxx -I/usr/include/python2.6
g++ -lpython -dynamiclib example.o example_wrap.o -o _example.so

【讨论】:

  • 粘贴此代码的人有一个错字:“dynamclib”--->“dynamiclib”
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多