Как связать как .so вместо .dylib на OSX 10.6, используя qmake - PullRequest
2 голосов
/ 08 апреля 2010

Я пытаюсь использовать 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 Builder:

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

Compile and Link работает нормально, но оставляет меня с bin/_mylibname.dylib, и когда я запускаю свое приложение python, оператор import _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

Я не очень разбираюсь в вопросах связывания, поэтому, пожалуйста, будьте осторожны: -)

Оле

1 Ответ

0 голосов
/ 22 июля 2010

Я думаю, у вас могут быть две проблемы.

Чтобы получить выходной файл в формате .so, я установил опцию компиляции -o mylib.so , и это заставило gcc правильно назвать файл.

Другая проблема, которую, я думаю, у вас может возникнуть, заключается в том, что на Mac связь с библиотекой python отличается от Linux. Я обнаружил, что на Mac вы не используете -lpython для ссылки на библиотеку Python, а вместо этого используете -framework python , и тогда компоновщик найдет правильную библиотеку.

...