Qt5(Qt4でもコンパイル)を使用したC++プロジェクトがあり、これをpython(3.4が望ましい)で利用できるようにしたいと考えています。これを行うために、私は PyQt4 を使用します (私が知る限り、PyQt5 ではもう使用できない QtXml モジュールのため)。これはすべて、私のLinuxマシンで完全に機能します。しかし残念ながら、私はWindowsに必要であり、実行できません。私がこれまでに行ったこと:
- Qt やその他の依存関係 (整数を返す 1 つの関数) のない非常に小さな例が機能します。gccでも。しかし、プロジェクトで「bad reloc」エラーが発生した後、MSVC に切り替えました
- 私のpython 3.4は「MSC v.1600 32ビット(Intel)」「on win32」でビルドされたので、私のコンピューター上のPythonはどのバージョンのVisual Studioでコンパイルされていますか?Qt 5.2.1 MSVC 2010と 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) をコンパイルしました。
これから先、どうしようか迷っています。私はライブラリについての知識がないことを認めなければなりません。
CONFIG += staticlib
C++/Qt プロジェクトは、QtCreatorとでコンパイルされ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 バージョンを意味します)
同じような悩みをお持ちの方、頑張ってください