用C语言扩展Python:无法映射

2024-04-18 12:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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。有人能透露些情况吗?此外,所有这些样板函数是否也是使其工作所必需的? 提前谢谢!你知道吗


Tags: 代码pyreturnsoincludeis错误null