2

我正在尝试使用 SWIG 包装一些 C++ 代码以供 Python 使用。如此处所述似乎有必要将我的 C++ 代码链接到.so文件,而不是.dylib文件。该线程建议libtool与标志结合使用-module来链接,但我正在使用 qmake 并且需要更精确的说明来说明我如何做到这一点。

我的 .pro 文件(用于 qmake)如下所示:

TEMPLATE = lib
TARGET = 
CONFIG += qt debug console plugin no_plugin_name_prefix
QT += opengl
DEPENDPATH += . libgm src
INCLUDEPATH += . libgm src /usr/include/python2.6/
LIBS += -L/usr/lib -lpython
MOC_DIR = .moc
OBJECTS_DIR = .tmp
DESTDIR = bin
TARGET = _mylibname
DEFINES  += COMPILE_DL=1

HEADERS += <my_headers> \
           src/swig_wrap.h

SOURCES += <my_sources>
           src/swig_wrap.cxx

我先调用swig,然后调用qmake,然后make使用 Eclipse 构建器:

cd src/
swig -c++ -python swig.i
cd ..
qmake -spec macx-g++
make all

编译和链接工作正常,但给我留下了bin/_mylibname.dylib,当我运行我的 python 应用程序时,语句导入_mylibname失败。

有谁知道我如何让 qmake 构建 a*.so而不是 a *.dylib,可能使用libtool(或任何其他我关心的方式)?我的平台:

  • Mac OS X 雪豹 (10.6)
  • 蟒蛇2.6
  • SWIG 1.3.31
  • qmake 2.01a 与 Qt 4.6.2
  • g++ i686-apple-darwin10-g++-4.2.1

我对链接问题不是很了解,所以请温柔:-)

奥莱

4

1 回答 1

0

我想你可能有两个问题。

为了使输出文件成为 .so 文件,我设置了编译选项-o mylib.so并强制 gcc 正确命名文件。

我认为您可能遇到的另一个问题是,在 Mac 上,与 python 库的链接与在 Linux 机器上的链接不同。我发现在 mac 上你不使用 -lpython 链接到 python 库,而是使用-framework python然后链接器会找到正确的库。

于 2010-07-22T03:34:44.593 回答