如何在OSX 10.6中使用qmake链接为.so而不是.dylib
我正在尝试使用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生成一个*.so
文件,而不是*.dylib
文件,可能使用libtool
(或者其他我不在乎的方式)?我的平台信息如下:
- Mac OS X Snow Leopard (10.6)
- Python 2.6
- SWIG 1.3.31
- qmake 2.01a 和 Qt 4.6.2
- g++ i686-apple-darwin10-g++-4.2.1
我对链接问题不是很了解,所以请多多指教 :-)
Ole
1 个回答
0
我觉得你可能遇到了两个问题。
为了让输出文件变成 .so 文件,我设置了编译选项 -o mylib.so,这样就强制 gcc 正确命名了文件。
另一个问题是,在 Mac 上链接 Python 库和在 Linux 机器上是不一样的。我发现,在 Mac 上你不需要用 -lpython 来链接 Python 库,而是要用 -framework python,这样链接器才能找到正确的库。