On Wed, 04 Jun 2008 05:57:20 -0700, spectrumdt wrote: > Hello. > > I am trying to extend Python with some C code. I made a trivial > "Hello World" program in C that I am trying to wrap in "boilerplate" for > inclusion in a Python program. But I can't compile the C code. The C > compiler cannot find the required function `Py_BuildValue'. > > My C code looks like this: > > > > #include "/usr/include/python2.5/Python.h" > > /* Python wrapper for 'main'. */ > static PyObject* mpi_main() { > int res = main(); > PyObject* retval = (PyObject*)Py_BuildValue("i",res); > } > > /* Main. A 'Hello World' function. */ int main() { > printf ("Hello, World. I am a C function.\n"); > } > > > > And my error message looks like this: > > > > [EMAIL PROTECTED] Opgave03]$ gcc ctest.c /tmp/ccH46bs8.o: In function > `mpi_main': ctest.c:(.text+0x1d): undefined reference to > `Py_BuildValue' collect2: ld returned 1 exit status > [EMAIL PROTECTED] Opgave03]$ > > > > I searched the newsgroup and found this thread: > > > http://groups.google.com/group/comp.lang.python/browse_thread/thread/ c6d70e02a6bc9528/87b836f369bd0042?lnk=gst&q=undefined+reference+to+% 60Py_BuildValue%27#87b836f369bd0042 > > It recommended that I add the option "-Wl,--export-dynamic" when > calling gcc. That makes no difference. The thread also has some more > stuff that I don't quite understand. > > Can anyone help? I am including Python.h, so why does it not find > Py_BuildValue? > > Thanks in advance.
Hi! Your C code contains too many errors. I'm lazy to comment them all. Here's my take on the trivial "Hello world" in Python C API: 1. create 'hello.c' file with the following content: #include <Python.h> PyObject* hello(PyObject* self) { printf("Hello world!\n"); Py_RETURN_NONE; } static PyMethodDef functions[] = { {"hello", (PyCFunction)hello, METH_NOARGS}, {NULL, NULL, 0, NULL}, }; DL_EXPORT(void) init_hello(void) { Py_InitModule("_hello", functions); } 2. create 'buildme.py' file with this content: import os import sys from distutils.core import Extension, setup os.chdir(os.path.dirname(os.path.abspath(__file__))) sys.argv = [sys.argv[0], 'build_ext', '-i'] setup(ext_modules = [Extension('_hello', ["hello.c"])]) 3. run "python buildme.py" That's all. >>> from _hello import hello >>> hello() Hello world! -- Ivan -- http://mail.python.org/mailman/listinfo/python-list