2014-09-03 6 views
0

Как мой заголовок говорит, я пытаюсь разработать расширение C для Python. Я выполнил этот учебник здесь, и я запустил скрипт setup.py. Как бы то ни было, когда я запускаю интерпретатор python и пытаюсь импортировать мой недавно созданный модуль, я получаю ошибку компоновщика undefined: py_BuildValue. Я также попытался скомпилировать его сам, и я получил те же ошибки плюс ошибка, говорящая о том, что Py_InitModule3 не определен. Я установил оба python3.2-dev и python3-dev. Вот мой test.c код:Ошибка компоновщика: расширения C/C++ для python

#include <python3.2/Python.h> 
static PyObject* Test(PyObject* self){ 
    return py_BuildValue("s","This is a test and my first trip into the world of python bindings!!"); 
} 

static PyMethodDef test_funcs[] ={{"testExtensions",(PyCFunction)Test, METH_NOARGS,"This is my First Extension!!"},{NULL}}; 

void initTest(void){ 
    Py_InitModule3("Test", test_funcs, "Extension module example!"); 
} 

И мой setup.py код:

from distutils.core import setup, Extension 
setup(name='Test', version='1.0', \ 
    ext_modules=[Extension('Test', ['test.c'])]) 

ответ

2

Это потому, что функция называется Py_BuildValue, а не py_BuildValue. C чувствителен к регистру. Если вы еще раз просмотрите свои компилируемые сообщения, вы, вероятно, также получите предупреждение о том, что функция объявляется неявно.

+0

Охммм. Я следил за учебником. Infact Коди копируется и вставляется. Но я думаю, что это может быть Спасибо. – rady

+0

Я продолжил это. Мне известны такие глупые вещи, но, похоже, это не проблема. – rady

+0

@rady: Вы уверены, что это та же ошибка? Когда я пытаюсь скомпилировать ваш код, но исправляю капитализацию 'Py_BuildValue', ошибка перемещается, чтобы построить примерно' Py_InitModule3', что понятно, так как это функция Python 2, в то время как вы пытаетесь скомпилировать для Python 3. – Dolda2000

Смежные вопросы