環境是 : Python3.4.3-64bit、MinGW-64、Win7
< 前言 >
一開始直接使用 Code::Blocks 附帶的 MinGW
即使後來可以編譯成功,程式執行的時候還是會錯誤
錯誤訊息 : ImportError: DLL load failed: %1 不是正確的Win32 應用程式
這是因為 Code::Blocks 的 MinGW 是 32bits 的,而自己裝的 Python 是 64bits 所造成的
< 正題 >
1. 到官網下載 MinGW-64
2. 安裝 MinGW-64,安裝配置如下
最後把安裝路徑加到環境變數 path,例如
D:\Program Files\mingw-w64\x86_64-4.9.2-posix-seh-rt_v3-rev1\mingw64\bin
3. 用 C 寫一個 Fabonacci 數列
#include <Python.h>
int Fibonacci(int n)
{
if(n < 2)
{
return n;
}
else
{
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
static PyObject *fib(PyObject *self, PyObject *args)
{
int n;
if(!PyArg_ParseTuple(args,"i", &n))
{
return NULL;
}
return Py_BuildValue("i",Fibonacci(n));
}
//{Python要使用的 methond 名稱, C 裡面的函式名稱, 參數傳遞方式, 用在Python 裡面的函式說明 __doc__}
static PyMethodDef myMethods [] =\
{
{"fib",fib,METH_VARARGS,"費式數列"},
{NULL, NULL,0,NULL}
};
static struct PyModuleDef myModule = \
{
PyModuleDef_HEAD_INIT,
"fib",
NULL,
-1,
myMethods
};
PyMODINIT_FUNC PyInit_fib(void)
{
return PyModule_Create(&myModule);
}
4. 寫一個相對應的 setup.py
5. 打開 cmd 到檔案所在路徑,輸入以下指令
python setup.py build --compiler=migw32
之後會在同路徑下生成一個 build 資料夾,裡面會有 lib.win-XXXX 的資料夾
將裡面的 pyd 檔案移出到和步驟6要寫的 py 檔同一地方
6. 寫一個 py 來使用 C 的函數
輸出結果
參考資料
1. http://www.xuebuyuan.com/898321.html
2. http://m.oschina.net/blog/291514
沒有留言:
張貼留言