error: ‘METH_VARAGS’ undeclared here (not in a function)

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
cimatosa
User
Beiträge: 2
Registriert: Freitag 9. November 2012, 12:29

Hi,

ich habe das Problem, dass beim Erstellen meines c-Moduls, gcc den folgenden Fehler spuckt: error: ‘METH_VARAGS’ undeclared here (not in a function)!
python-dev ist installiert, die Datei Python.h kann vom compiler auch gefunden werden. Warum kenn er den FLAG METH_VARAGS nicht? wo sollte der deklariert sein? ersetzte ich METH_VARAGS durch 0 wird erfolgreich kompelliert. aber das Argumente-Parsen klappt nicht, denn das korrente Handling bestimmt ja dieser FLAG.

hier der C-Code

Code: Alles auswählen

#include <Python.h>

static PyObject* py_rand2DSample(PyObject* self, PyObject* args)
{
  int n;
  if (! PyArg_ParseTuple(args, "i", &n))
    return NULL;
  return Py_BuildValue("i", n);
}

static PyMethodDef myCForPython_methods[] = {
  {"rand2DSample", py_rand2DSample, METH_VARAGS},
  {NULL, NULL}
};

void initmyCForPython()
{
	(void) Py_InitModule("myCForPython", myCForPython_methods);
}
Kenn jemand das Problem? und evt auch eine Lösung?

Grüße
BlackJack

@cimatosa: Du musst das nur richtig schreiben, dann wird es auch gefunden. Es heisst METH_VARARGS. :-)

Edit: Python-Erweiterungen per Hand in C zu schreiben wäre bei mir übrigens dritte Wahl. Das würde ich erst machen wenn normale C-Bibliothek schreiben und per `ctypes` einbinden oder eine Erweiterung in Cython zu schreiben aus irgendwelchen Gründen nicht in Frage käme.
cimatosa
User
Beiträge: 2
Registriert: Freitag 9. November 2012, 12:29

oh wie peinlich, aber vielen Dank. Ich hatte den Code nur ausm Netz kopiert und nicht se genau hingesehen.

Danke
Antworten