我正在尝试使用SWIG来包装一些用于Python的C ++代码。如上所述here,似乎有必要将我的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
我首先使用Eclipse构建器调用swig
,然后调用qmake
,然后调用make
:
cd src/
swig -c++ -python swig.i
cd ..
qmake -spec macx-g++
make all
编译和链接工作正常,但留给我bin/_mylibname.dylib
,当我运行我的python应用程序时,语句import _mylibname
失败。
有谁知道如何让qmake构建*.so
而不是*.dylib
,可能使用libtool
(或者我所关心的任何其他方式)?我的平台:
我对链接问题不是很了解,所以请保持温和: - )
奥莱
答案 0 :(得分:0)
我想你可能有两个问题。
要将输出文件作为.so文件,我设置编译选项 -o mylib.so ,并强制gcc正确命名文件。
我认为你可能遇到的另一个问题是,在Mac上,与python lib的链接与Linux机器上的链接不同。我发现你在mac上没有使用-lpython链接到python库,而是使用 -framework python 然后链接器将找到正确的lib。