2

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

4

0 回答 0