如何在OSX 10.6中使用qmake链接为.so而不是.dylib

2 投票
1 回答
3460 浏览
提问于 2025-04-15 21:23

我正在尝试使用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,这样链接器才能找到正确的库。

撰写回答