Cython を使用して、hello.pyx ファイルを exe にコンパイルしようとしています。
最初のステップは、コマンド「cython --cplus --embed hello.pyx」を使用して、hello.pyx を hello.cpp ファイルにコンパイルすることでした。Embed
オプションはすることを意味しGenerate a main() function that embeds the Python interpreter
ます。依存関係のない独立したexeを作成しようとしています。
にhello.cpp
がある#include "Python.h"
ので、ここから Python ソースをダウンロードしています: http://www.python.org/download/releases/2.6.6/、Gzipped source tar ball (2.6.6)を選択します。include dir を追加すると、Python26.lib が見つからないというエラーが表示されます。だから私はそれをコンパイルしようとしています。デフォルトのビルドでは python26.lib が作成されますが、200 KB しかありません。これは静的ライブラリではありません。hello.cpp をコンパイルしようとすると、参照が見つからないというエラーが発生します。
README には、静的にビルドする方法に関する有用な指示はありません。ただし、オンラインの README ファイルをグーグルで検索しました。トランク内の最新バージョンの python (3.x) については、静的ビルドに関する有用な情報がいくつかあります。
http://svn.python.org/projects/python/trunk/PCbuild/readme.txt
ソリューションには、静的ライブラリの構成がありません。ただし、DLL の代わりにスタティック ライブラリをビルドするのは簡単です。「構成タイプ」を「静的ライブラリ (.lib)」に設定し、プリプロセッサ マクロ「Py_ENABLE_SHARED」を「Py_NO_ENABLE_SHARED」に変更するだけです。また、「ランタイム ライブラリ」を「マルチスレッド DLL (/MD)」から「マルチスレッド (/MT)」に変更する必要がある場合もあります。
しかし、まだ詳細はあまりありません。ソリューション内のすべてのプロジェクトを静的ライブラリとしてビルドするように設定する必要がありますか? それともpythoncoreのみ?「Python」および「Pythonw」プロジェクトは「アプリケーション」であるため、ランタイム ライブラリを /MT にのみ変更できます。これらは私がやっている手順です:
- 「リリース」モードに変更します。
- Project "Python" -
/MT
プリプロセッサ定義の設定と追加Py_NO_ENABLE_SHARED
- Project "Pythoncore" -プリプロセッサ定義を
Static library (.lib)
/MT に置き換える構成タイプPy_ENABLE_SHARED
Py_NO_ENABLE_SHARED
- プロジェクト「Pythonw」 - 「Python」と同じ。
- 「Python」でビルドを右クリックします。
ビルドの概要:
ビルド: 5 成功、1 失敗、0 最新、0 スキップ
kill_python (ok)
make_buildinfo (ok)
make_versioninfo (ok)
pythoncore (ok)
w9xpopen (ok)
python (4 errors)
失敗したプロジェクトは「Python」です。ログは次のとおりです。
------ Build started: Project: python, Configuration: Release Win32 ------
Compiling...
python.c
Compiling resources...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation. All rights reserved.
Linking...
pythoncore.lib(sysmodule.obj) : error LNK2019: unresolved external symbol __Py_svnversion referenced in function _svnversion_init
pythoncore.lib(getversion.obj) : error LNK2019: unresolved external symbol _Py_GetBuildInfo referenced in function _Py_GetVersion
pythoncore.lib(dynload_win.obj) : error LNK2019: unresolved external symbol __Py_DeactivateActCtx referenced in function __PyImport_GetDynLoadFunc
pythoncore.lib(dynload_win.obj) : error LNK2019: unresolved external symbol __Py_ActivateActCtx referenced in function __PyImport_GetDynLoadFunc
d:\python\src4\PCbuild\\python.exe : fatal error LNK1120: 4 unresolved externals
Build Time 0:02
/PCbuild/ ディレクトリを見てみると、「pythoncore.lib」(10MB) は存在しますが、「python26.lib」はありません。
これらのエラーをグーグルで検索すると、mail.pythong.org で 1 つの会話しか見つかりません: http://www.groupsrv.com/computers/about397568.html
pythoncore プロジェクトで先行定義 "_USRDLL" を削除しようとしましたが、それでもエラーは同じです。
pythoncore のプリプロセッサ定義は次のとおりです。
_USRDLL
Py_BUILD_CORE
Py_NO_ENABLE_SHARED
WIN32
編集をクリックすると、別のボックスに「継承された値」が表示されます。
NDEBUG
_WIN32
モードをReleaseに変更したため、そのNdebugは奇妙です。
すべてのサービス パックがインストールされた Visual Studio 2008 (Express ではない) を使用しています。
ところで。以前にソリューション全体を構築しようとしましたが、パスが「../../dba-」で始まるファイルが見つからないというエラーがいくつかありました。
Python の 2.6.2 および 2.6.6 バージョンをコンパイルしようとしましたが、どちらも同じエラーをスローします。pythoncore.lib(sysmodule.obj) : error LNK2019: unresolved external symbol