Как скомпилировать (и связать) модуль Python, используя PyQt (и sip) под Windows

У меня есть проект C++, использующий Qt5 (также компилируется с Qt4), который я хочу сделать доступным в python (предпочтительно 3.4). Для этого я использую PyQt4 (из-за модуля QtXml, который, насколько я знаю, больше не доступен в PyQt5) и sip. Это все прекрасно работает на моей машине Linux. Но, к сожалению, мне это нужно для Windows, и я не могу его запустить. Что я сделал до сих пор:

  • Очень маленький пример без Qt или других зависимостей (одна функция, которая возвращает целое число) работает. Даже с gcc. Но после ошибки "плохое перемещение" в моем проекте я переключился на MSVC
  • Мой python 3.4 был собран с "MSC v.1600 32 bit (Intel)" "на win32", поэтому в соответствии с какой версией Visual Studio скомпилирован Python на моем компьютере? Я скачал Qt 5.2.1 MSVC2010 и Microsoft Visual Studio Express 2010 SP1
  • Я предполагаю, что предварительно скомпилированный PyQt4-4.11.2-gpl-Py3.4-Qt5.3.1-x32 должен соответствовать
  • Чтобы получить файл sip.h и sipconfig.py, я скомпилировал sip (4.16.3).

Отныне я не уверен, что делать. Я должен признать, что у меня нет знаний о библиотеках.

  • Проект C++/Qt компилируется с помощью QtCreator с CONFIG += staticlib а также TEMPLATE = lib, Получившийся *.lib (здесь: xml2db.lib) был скопирован в папку, где находятся мои sip-файлы (например, sipxml2dbcmodule.cpp)

Поэтому через "Командную строку VS" nmake выбрасывает фатальные ошибки (ссылки). Я не уверен, какими должны быть необходимые флаги компилятора или если staticlib неверен. Мои флаги:

LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT /DLL /MANIFEST /MANIFESTFILE:$(TARGET).manifest /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /NODEFAULTLIB:library /LIBPATH:/LIBPATH:C:\Qt\5.2.1\msvc2010\lib
LIBS = /LIBPATH:C:\Python34\libs python34.lib xml2db.lib /LIBPATH:C:\Qt\5.2.1\msvc2010\lib\Qt5Xmld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Sqld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Cored.lib
$(TARGET): $(OFILES)
$(LINK) $(LFLAGS) /OUT:$(TARGET) $(OFILES) $(LIBS)

Где цель "myTools.pyd". Это приводит к

sipmyToolscmodule.cpp
sipmyToolsxml2db.cpp
Generating Code...
        link /NOLOGO /DYNAMICBASE /NXCOMPAT /DLL /MANIFEST /MANIFESTFILE:myTools
.pyd.manifest /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /NODEFAULTLIB:library /LIBPATH:
C:\Qt\5.2.1\msvc2010\lib /OUT:myTools.pyd sipmyToolscmodule.obj sipmyToolsxml2db
.obj /LIBPATH:C:\Python34\libs python34.lib xml2db.lib /LIBPATH:C:\Qt\5.2.1\msvc
2010\lib\Qt5Xmld.lib C:\Qt\5.2.1\msvc2010\lib\Qt5Sqld.lib C:\Qt\5.2.1\msvc2010\l
ib\Qt5Cored.lib
xml2db.lib(xml2db.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_L
EVEL': value '2' doesn't match value '0' in sipmyToolscmodule.obj
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_i
nfo(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIB
CMT.lib(typinfo.obj)
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall
 type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z)
already defined in LIBCMT.lib(typinfo.obj)
   Creating library myTools.lib and object myTools.exp
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; u
se /NODEFAULTLIB:library
myTools.pyd : fatal error LNK1169: one or more multiply defined symbols found
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\link.EXE"' : return code '0x491'
Stop.

Я был бы рад за ответ или свежую идею. Заранее спасибо.

РЕДАКТИРОВАТЬ Я не знаю точно, как я решил это, но вот еще несколько советов, которые помогли мне решить это.

  • Поскольку в sip 5 не будет системы сборки, я попытался создать проект qmake. Для этого я скачал исходный пакет pyqt, посмотрел файлы проекта и настроил его под свои нужды.
  • Особенно, когда вы изменяете файл проекта qmake, может быть полезно удалить файлы make, object и / или moc.
  • Версия qt должна полностью соответствовать версии pyqt (на самом деле я имею в виду не саму версию, а версию qt, для которой она была скомпилирована)

Удачи тем, у кого есть похожие проблемы

0 ответов

Другие вопросы по тегам