[Tutor] First extension

Emile van Sebille emile at fenx.com
Sun Mar 28 18:25:01 CEST 2010


On 3/26/2010 7:03 PM James Reynolds said...
> Hello All,
>
> I'm trying to write my first extension module, and I am getting the
> following error in my command prompt and I was hoping you all could help me.

Hi James,

You'll probably get further asking on the setuptools support list. 
Checking http://pypi.python.org/pypi/setuptools I see links to the list 
at http://mail.python.org/pipermail/distutils-sig/

Those are the guys that will want this info and will most likely help 
you work through it.

HTH,

Emile


>
> I have taken the following steps already:
>
>
>     1. My path is set for mingw/bin as well as python31.
>     2. There is a file in my disutils folder called disutils.cfg that says
>     [build] compiler = mingw32
>     3. The instructions in the 3.1 documentation state the following: "These
>     instructions only apply if you’re using a version of Python prior to 2.4.1
>     with a MinGW prior to 3.0.0 (with binutils-2.13.90-20030111-
>        1. http://docs.python.org/py3k/install/index.html
>        2. I am using Python 3.1 and the latest MinGW.
>     4. I tested gcc/mingw by doing C:\python31>gcc -shared pdv.c -o pdv.dll
>     and the test was succesful (or at least I was not given any errors while
>     doing the compile)
>     5. I searched on the internet and the closest thing I can find is the
>     following: http://bugs.python.org/issue4709
>
>
> Below you will find the following
>
> One, the error report
> two,my setup.py file
> three, the file I am trying to turn into a python extension module by
> running the following two commands:
>
> python setup.py build
> python setup.py install
>
>
> #1
>
>
> Microsoft Windows [Version 6.1.7600]
>
> Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
>
>
>> c:\Python31\Lib\finance>python setup.py build
>
> running build
>
> running build_ext
>
> building 'finance' extension
>
> creating build
>
> creating build\temp.win-amd64-3.1
>
> creating build\temp.win-amd64-3.1\Release
>
> C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python31\include
>> -IC:\Pytho
>
> n31\PC -c finance.c -o build\temp.win-amd64-3.1\Release\finance.o
>
> finance.c: In function `PyInit_finance':
>
> finance.c:31: warning: implicit declaration of function `Py_Module_Create'
>
> finance.c:31: warning: return makes pointer from integer without a cast
>
> writing build\temp.win-amd64-3.1\Release\finance.def
>
> creating build\lib.win-amd64-3.1
>
> C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s
>> build\temp.win-amd64-3.1\Release\fin
>
> ance.o build\temp.win-amd64-3.1\Release\finance.def -LC:\Python31\libs
>> -LC:\Pyth
>
> on31\PCbuild\amd64 -lpython31 -lmsvcr90 -o
>> build\lib.win-amd64-3.1\finance.pyd
>
> build\temp.win-amd64-3.1\Release\finance.o:finance.c:(.text+0x2b): undefined
>> ref
>
> erence to `_imp__PyArg_ParseTuple'
>
> build\temp.win-amd64-3.1\Release\finance.o:finance.c:(.text+0x5c): undefined
>> ref
>
> erence to `_imp__Py_BuildValue'
>
> build\temp.win-amd64-3.1\Release\finance.o:finance.c:(.text+0x74): undefined
>> ref
>
> erence to `Py_Module_Create'
>
> collect2: ld returned 1 exit status
>
> error: command 'gcc' failed with exit status 1
>
>
>> c:\Python31\Lib\finance>
>
>
>
> #2
>
>
> from distutils.core import setup, Extension
>
>
>> setup(name = "finance",
>
>        version = "1.0",
>
>        ext_modules = [Extension("finance", ["finance.c"])])
>
>
>
> #3
>
> #include<Python.h>
>
> #include<math.h>
>
>
>> static PyObject *
>
> pdv(PyObject *self, PyObject *args)
>
> {
>
> double value, rate, timex, denom, pdvx;
>
> if (!PyArg_ParseTuple(args, "ddd",&value,&rate,&timex))
>
> return NULL;
>
>      denom = (double) pow ((1 + rate), (timex));
>
>      pdvx = value / denom;
>
> return Py_BuildValue("d", pdvx);
>
> }
>
> PyMethodDef pdvMethods[] = {
>
>      {"pdv", pdv, METH_VARARGS, "Returns the Present Discounted Value given
>> of a single future value"},
>
>      {NULL, NULL, 0, NULL}
>
> };
>
>
>> static struct PyModuleDef financemodule = {
>
>     PyModuleDef_HEAD_INIT,
>
>     "finance",   /* name of module */
>
>     NULL, /* module documentation, may be NULL */
>
>     -1,       /* size of per-interpreter state of the module,
>
>                  or -1 if the module keeps state in global variables. */
>
>     pdvMethods
>
> };
>
>
>> PyMODINIT_FUNC
>
> PyInit_finance(void)
>
> {
>
>      return Py_Module_Create(&financemodule);
>
> }
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor




More information about the Tutor mailing list