Python を C で拡張しようとしています。私の C コードはコンパイルされ、.so ファイルを取得しますが、Python にインポートすると、次のエラーが発生します。
ImportError: dlopen(/Users/.../python/PYC/isprime.so, 2): no suitable image found. Did find:
/Users/.../python/PYC/isprime.so: can't map
ここに私のCコードがあります:
#include <Python.h>
#include <stdio.h>
static PyObject *is_prime(PyObject *self, PyObject *args)
{
int i;
int num;
int primes[] = {};
PyArg_ParseTuple(args, "b b", &num, &primes);
int max = num/2;
if(num % 2 == 0) {
return 0;
} else {
for(i=0; primes[i] <= max; i++) {
if(num % primes[i] == 0) {
return Py_BuildValue("i", 0);
}
}
return Py_BuildValue("i", 1);
}
}
static PyMethodDef is_primeMethods[] = {
/* name, function, argument type, docstring */
{"is_prime", is_prime, METH_VARARGS, "Detect primes"},
/* An end-of-listing sentinel: */
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
init_isprime(void)
{
PyObject *m;
m = Py_InitModule("is_prime", is_primeMethods);
}
int main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]);
Py_Initialize();
init_isprime();
}
そして私のメイクファイル:
PYLIB = /usr/bin
PYINC = /usr/include/python2.5
isprime.so: isprime.c
gcc isprime.c -g -I$(PYINC) -shared -L$(PYLIB) -m64 -lpython2.5 -o isprime.so
clean:
rm -f isprime.so
この「マップできません」エラーをどこでも検索しましたが、何も見つかりませんでした。私はosx 10.6.8を実行しています。誰か光を当てることができますか?また、これらすべてのボイラープレート関数も機能させるために必要ですか? 前もって感謝します!