インストーラは 130KB 程のサイズしかありません。
本体をインターネットからダウンロードするように出来ています。
・ダウンロード&インストール
・ダウンロードのみ
2 通りから選択します。
北陸先端大学のサーバが休みだったのでけいはんなのサーバを指定しています。
パッケージはデフォルト (Current) を選択しています。
インストールコンポーネントの選択
コンポーネントは Base だけでも良いのですが MinGW は gcc なので make (mingw32-make.exe) も選択しています。
合計で 54.1MB 必要と表示されています。
インストールフォルダの選択
デフォルトのままを押します
スタートメニュー名の指定
デフォルトのままを押します
コンポーネントのダウンロード
インターネットに接続できないとインストール出来ません。
ダウンロード&インストールを選択したのでインストールも行っています。
を押して終了。
マイコンピュータ - プロパティ(R) をたどると「システムのプロパティ」が開きます。
「詳細」タブの を押すと環境変数のダイアログが開きます。
下段に「システム環境変数(S)」があるので Path を選択して を押します。
変数値(V): の最後に ;C:\MinGW\bin を追加して を押します。
; (セミコロン) は検索パスの区切り文字です。忘れずに記入します。
C:\MinGW は MinGW-5.0.2 のインストールで指定したディレクトリです。
C:\tmp\helloworld.c
#include <stdio.h>
main()
{
printf("Hello world.\n") ;
}
コンパイル&実行
■コマンド プロンプト
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\tmp>gcc -o helloworld.exe helloworld.c C:\tmp>dir helloworld.exe ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0834-3CA7 です C:\tmp のディレクトリ 2006/04/30 03:11 15,663 helloworld.exe 1 個のファイル 15,663 バイト 0 個のディレクトリ 1,623,658,496 バイトの空き領域 C:\tmp>strip helloworld.exe --- strip も使えます C:\tmp>dir helloworld.exe ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0834-3CA7 です C:\tmp のディレクトリ 2006/04/30 03:12 5,632 helloworld.exe 1 個のファイル 5,632 バイト 0 個のディレクトリ 1,623,666,688 バイトの空き領域 C:\tmp>.\helloworld.exe Hello world. C:\tmp>
ソースファイルを作成
PExports 0.42h をダウンロードし、解凍
copy C:\Python24\libs\libpython24.a C:\Python24\libs\libpython24.a.org --- 元の libpython を退避
.\pexports-0.42h\bin\pexports.exe C:\WINDOWS\system32\python24.dll > .\python24.def --- DLL からシンボルテーブルを作成
C:\MinGW\bin\dlltool.exe --dllname python24.dll --def .\python24.def --output-lib C:\Python24\libs\libpython24.a --- DLL とシンボルテーブルからインポートライブラリを作成
python C:\Python24\Tools\Scripts\setup.py build --compiler=mingw32 --- .pyc を再作成
example.c (ファイル名は何でも良い)ソースファイルから DLL を作成
#include <Python.h> //--- Python API ヘッダの指定 // Python.h には既に stdio.h string.h errno.h stdlib.h のインクルード指定が含まれています // メソッドの実体 static PyObject* exec_do(PyObject* self, PyObject* args) { const char* command ; //--- command は PyArg_ParseTuple によって alloc される int status ; if (!PyArg_ParseTuple(args, "s", &command)) return NULL ; status = system(command) ; return Py_BuildValue("i", status) ; } // メソッドテーブル // メソッド名 / 関数へのポインタ / 呼び出し規則 / 説明書き(何を書いても良い) // python の help から参照することができます。 static PyMethodDef executerMethods [] = { { "do", exec_do, METH_VARARGS, "Execute command for Command-prompt in Windows." }, { NULL, NULL, 0, NULL } } ; // モジュールの初期化関数 (Python にモジュール名とメソッドテーブルを渡します) PyMODINIT_FUNC initexecuter(void) // 初期化モジュール名は init + "DLL 名" にする必要があります。 { Py_InitModule("executer", executerMethods) ; // モジュール名は DLL 名と同じにする必要があります。 }
C:\MinGW\bin\gcc -I C:\Python24\include -c -o example.o example.cDLL を import して実行
C:\MinGW\bin\dllwrap --driver-name gcc --dllname executer.dll example.o C:\Python24\libs\libpython24.a
以下のエラーメッセージが出ますが正常です。
dllwrap: no export definition file provided.
Creating one, but that may not be what you want
■コマンド プロンプト - python
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\tmp>python
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import executer
>>> result = executer.do("dir")ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0834-3CA7 です C:\tmp のディレクトリ 2006/05/08 22:26 <DIR> . 2006/05/08 22:26 <DIR> .. 2006/05/08 22:25 1,001 example.c 2006/05/08 22:25 1,056 example.o 2006/05/08 22:25 15,369 executer.dll 3 個のファイル 17,426 バイト 2 個のディレクトリ 147,784,990,720 バイトの空き領域>>> result
0
>>> ^Z
C:\tmp>