我正在尝试用 C 扩展 Python。我的 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();
}
还有我的makefile:
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。任何人都可以解释一下吗?此外,所有这些样板函数是否也需要使其工作?提前致谢!