[Numpy-discussion] Problems compiling ufuncs example (2)

Kosta Gaitanis kosh at skynet.be
Tue Oct 11 05:08:38 EDT 2005


Kosta Gaitanis wrote:
Hi again,
I downloaded mingw32 and this seemed to fix the compilator problem. 
However I still can't build the ufunc example !

This time I tried :

       python setup.py build_ext --compiler=mingw32

and get the following output:

    running build_ext
    building 'numarray.foo._foo' extension
    c:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -Iinclude
    -Iinclude/numarray -Ic
    :\python24\Include
    umarray -IC:\Python24\include -IC:\Python24\PC -c foo/Src/_foo.c -o
    build\temp.w
    in32-2.4\Release\foo\src\_foo.o
    foo/Src/_foo.c:8: warning: ignoring #pragma warning
    foo/Src/_foo.c: In function `init_funcDict':
    foo/Src/_foo.c:26: warning: unused variable `keytuple'
    foo/Src/_foo.c:26: warning: unused variable `cfunc'
    writing build\temp.win32-2.4\Release\foo\src\_foo.def
    c:\mingw\bin\gcc.exe -mno-cygwin -shared -s
    build\temp.win32-2.4\Release\foo\src
    \_foo.o build\temp.win32-2.4\Release\foo\src\_foo.def -LLib
    -LC:\Python24\libs -
    LC:\Python24\PCBuild -lpython24 -lmsvcr71 -o
    build\lib.win32-2.4\numarray\foo\_f
    oo.pyd
    build\temp.win32-2.4\Release\foo\src\_foo.o(.text+0x87):_foo.c:
    undefined refere
    nce to `_imp__PyCObject_Type'
    build\temp.win32-2.4\Release\foo\src\_foo.o(.text+0xa6):_foo.c:
    undefined refere
    nce to `_imp__PyExc_ImportError'
    collect2: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1

If I remove the comments from the line     libraries = ['ttf']    (at 
the end of setup.py) and try again I get this error :

    running build_ext
    building 'numarray.foo._foo' extension
    c:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -Iinclude
    -Iinclude/numarray -Ic
    :\python24\Include
    umarray -IC:\Python24\include -IC:\Python24\PC -c foo/Src/_foo.c -o
    build\temp.w
    in32-2.4\Release\foo\src\_foo.o
    foo/Src/_foo.c:8: warning: ignoring #pragma warning
    foo/Src/_foo.c: In function `init_funcDict':
    foo/Src/_foo.c:26: warning: unused variable `keytuple'
    foo/Src/_foo.c:26: warning: unused variable `cfunc'
    writing build\temp.win32-2.4\Release\foo\src\_foo.def
    c:\mingw\bin\gcc.exe -mno-cygwin -shared -s
    build\temp.win32-2.4\Release\foo\src
    \_foo.o build\temp.win32-2.4\Release\foo\src\_foo.def -LLib
    -LC:\Python24\libs -
    LC:\Python24\PCBuild -lttf -lpython24 -lmsvcr71 -o
    build\lib.win32-2.4\numarray\
    foo\_foo.pyd
    c:\mingw\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe:
    cannot fin
    d -lttf
    collect2: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1

Can someone tell me what I'm doing wrong please.

Thanks
Kosta

> Hi all,
>
> I'm trying to run the UFunc example in the Numarray manual 
> (http://stsdas.stsci.edu/numarray/numarray-1.1.html/node32.html)
> but when I run the command
>
>    python setup.py buil_ext
>
>
> I get the following output :
>
>    running build_ext
>    error: Python was built with version 7.1 of Visual Studio, and
>    extensions need t
>    o be built with the same version of the compiler, but it isn't 
> installed
>
>
> so I installed Visual C++ Toolkit 2003 and then run the same command 
> again and got the following output :
>
>    running build_ext
>    error: the .NET Framework SDK needs to be installed before building
>    extensions f
>    or Python
>
>
> so I installed .NET Framework SDK 1.1 and then tried again.
> I got back the first error...
>
> does anyone have an idea ? What am I doing wrong ?
>
> thanks in advance
> Kosta
>
> I'm using Python24 and NumArray 1.3.3
>
>
> -- setup.py --
> """ This setup demonstrates how to use the numarray code generation
> facilities to define additional ufuncs at the user level.  Universal
> functions apply operators or C-functions elementwise to all of the
> elements of an array or pair of arrays. This setup generates code
> defining three universal functions which are installed as the
> numarray.foo package: Cos, bessel, and bar.
>
> The ufuncs are used like this:
>
> >>> import numarray as na
> >>> import numarray.foo as foo
> >>> a = na.array([1,2,3,4], type='Int32')
> >>> foo.Cos(a)
> array([ 0.54030228, -0.41614684, -0.9899925 , -0.65364361 ], 
> type=Float32)
>
> Note that since a is an Int32 array, Cos(a) first does blockwise
> conversion of a to Float32 before calling the cosine library function.
> """
>
> import distutils, os
> from distutils.core import setup
> from numarray.numarrayext import NumarrayExtension
> from numarray.codegenerator import UfuncModule, make_stub
>
> # ======================================================================
> #
> # Generate the C-code for the numarray.foo._foo extension:
> #
>
> m = UfuncModule("_foo")          
>
> # Inline the code for a couple C functions to be turned into ufuncs.
> # This method lets you define your function here in the setup.py.  An
> # alternate approach would be to link with a libarary or additional C
> # module.
> m.add_code("""
>
> static double c_bessel(double x, double y)
> {
>      double x2=x*x, y2=y*y, diff=x2-y2;
>      return diff*diff/(x2+y2);
> }
>
> static UInt8  c_bar(UInt32 x )
> {
>      return (x >> 24) & 0xFF;
> }
>
> """)
>
> # Method add_ufunc() defines the name of a ufunc, it's corresponding C
> # function which is applied element-wise to all elements of an array,
> # The arity of the ufunc (unary or binary only), and the I/O type
> # signatures which are directly supported by the ufunc.  Binary Ufunc
> # "bessel" is implemented by the inline function "c_bessel" from the
> # add_code() call above.
>
> m.add_ufunc("bessel", "c_bessel", 2, [('Float32', 'Float32'),
>                                      ('Float64', 'Float64')])
>
> # Unary Ufunc "bar" only supports one builtin type signature:
> # UInt32-->UInt8.  Other types are blockwise converted by the ufunc
> # machinery to UInt32 before "c_bar" is called.
>
> m.add_ufunc("bar", "c_bar", 1, [('UInt32','UInt8')])
>
> # Unary Ufunc "cos" is implemented by the C standard library function
> # "cos".  Given a Float32 array, it returns a Float32 array.  Given a
> # Float64 array, it returns a Float64 array.  For other arrays,
> # transparent conversion to one of the supported input types is performed
> # by the ufunc machinery.
>
> m.add_ufunc("cos", "cos", 1, [('Float32', 'Float32'),
>                              ('Float64', 'Float64')])
>
> # The generate() method writes out the complete extension module to the
> # specified C file.
> m.generate("foo/Src/_foo.c")
>
> # ======================================================================
> # Create foo's __init__.py for defining UFuncs corresponding to CFuncs
> # in _foo.  make_stub() emits boiler-plate which makes your extension
> # a package.  The __init__ file imports all the public symbols from
> # C extension _foo making them visible as numarray.foo.
>
> make_stub("foo/Lib/__init__", "_foo")
> # ======================================================================
> #
> # Standard distutils setup for the generated code.
> #
> setup(name = "foo",
>      version = "0.1",
>      maintainer = "Todd Miller",
>      maintainer_email = "jmiller at stsci.edu",
>      description = "foo universal functions for numarray",
>      url = "http://www.stsci.edu/projects/foo/",
>      packages = ["numarray.foo"],
>      package_dir = { "numarray.foo":"foo/Lib" },
>      ext_modules = [ NumarrayExtension( 'numarray.foo._foo', 
> ['foo/Src/_foo.c'],
>                                         # libraries = ['ttf'],
>                                         # include_dirs = ['include'],
>                                         # library_dirs = ['lib']
>                                         )
>                      ]
>      )
>
>





More information about the NumPy-Discussion mailing list