[SciPy-user] Strange fortran (g95) build error on Mac OS X - not finding fortran compiler

Robert Kern robert.kern at gmail.com
Fri Jan 25 13:59:12 EST 2008


Adam Mercer wrote:
> On Jan 21, 2008 2:40 PM, Adam Mercer <ramercer at gmail.com> wrote:
> 
>> I'm running into a strange problem trying to build scipy-0.6.0 using
>> the g95-0.90 fortran compiler (from http://www.g95.org) on Mac OS X.
> 
> following up on this, I've managed to get past this error but am now
> running into the following problem:
> 
> /opt/local/bin/g95 -shared -shared
> build/temp.macosx-10.3-i386-2.5/build/src.macosx-10.3-i386-2.5/scipy/fftpack/_fftpackmodule.o
> build/temp.macosx-10.3-i386-2.5/scipy/fftpack/src/zfft.o
> build/temp.macosx-10.3-i386-2.5/scipy/fftpack/src/drfft.o
> build/temp.macosx-10.3-i386-2.5/scipy/fftpack/src/zrfft.o
> build/temp.macosx-10.3-i386-2.5/scipy/fftpack/src/zfftnd.o
> build/temp.macosx-10.3-i386-2.5/build/src.macosx-10.3-i386-2.5/fortranobject.o
> -L/opt/local/lib -Lbuild/temp.macosx-10.3-i386-2.5 -ldfftpack -lfftw3
> -o build/lib.macosx-10.3-i386-2.5/scipy/fftpack/_fftpack.so
> g95: unrecognized option '-shared'
> g95: unrecognized option '-shared'
> Undefined symbols:
>   "_PyExc_AttributeError", referenced from:
>       _PyExc_AttributeError$non_lazy_ptr in fortranobject.o
>   "_PyObject_Str", referenced from:
>       _array_from_pyobj in fortranobject.o
>   "_PyArg_ParseTupleAndKeywords", referenced from:
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfft_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfftnd_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_drfft_cache in _fftpackmodule.o
>   "_PyExc_ValueError", referenced from:
>       _PyExc_ValueError$non_lazy_ptr in fortranobject.o
>   "_PyExc_TypeError", referenced from:
>       _PyExc_TypeError$non_lazy_ptr in fortranobject.o
>   "_PyDict_GetItemString", referenced from:
>       _fortran_getattr in fortranobject.o
>   "_PyCObject_AsVoidPtr", referenced from:
>       _init_fftpack in _fftpackmodule.o
>   "_Py_BuildValue", referenced from:
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfft_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfftnd_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_drfft_cache in _fftpackmodule.o
>   "_PyComplex_Type", referenced from:
>       _PyComplex_Type$non_lazy_ptr in _fftpackmodule.o
>   "_PyDict_New", referenced from:
>       _PyFortranObject_NewAsAttr in fortranobject.o
>       _fortran_setattr in fortranobject.o
>       _PyFortranObject_New in fortranobject.o
>       _PyFortranObject_New in fortranobject.o
>   "_PyDict_SetItemString", referenced from:
>       _init_fftpack in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>       _F2PyDict_SetItemString in fortranobject.o
>       _fortran_getattr in fortranobject.o
>       _fortran_getattr in fortranobject.o
>       _fortran_setattr in fortranobject.o
>       _PyFortranObject_New in fortranobject.o
>   "_PyType_Type", referenced from:
>       _PyType_Type$non_lazy_ptr in _fftpackmodule.o
>   "__PyObject_New", referenced from:
>       _PyFortranObject_NewAsAttr in fortranobject.o
>       _PyFortranObject_New in fortranobject.o
>       _PyFortranObject_New in fortranobject.o
>   "_PyInt_Type", referenced from:
>       _PyInt_Type$non_lazy_ptr in _fftpackmodule.o
>   "_PyString_FromString", referenced from:
>       _init_fftpack in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>       _fortran_getattr in fortranobject.o
>       _fortran_getattr in fortranobject.o
>   "_PyErr_Occurred", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfft_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_zfftnd_cache in _fftpackmodule.o
>       _f2py_rout__fftpack_destroy_drfft_cache in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>       _F2PyDict_SetItemString in fortranobject.o
>   "_PyErr_NewException", referenced from:
>       _init_fftpack in _fftpackmodule.o
>   "_PyImport_ImportModule", referenced from:
>       _init_fftpack in _fftpackmodule.o
>   "_PyMem_Free", referenced from:
>       _fortran_dealloc in fortranobject.o
>       _fortran_dealloc in fortranobject.o
>   "_MAIN_", referenced from:
>       _main in libf95.a(main.o)
>   "_PyCObject_Type", referenced from:
>       _PyCObject_Type$non_lazy_ptr in _fftpackmodule.o
>   "_PyExc_ImportError", referenced from:
>       _PyExc_ImportError$non_lazy_ptr in _fftpackmodule.o
>   "_PyErr_Format", referenced from:
>       _init_fftpack in _fftpackmodule.o
>       _fortran_call in fortranobject.o
>       _fortran_call in fortranobject.o
>   "_PyNumber_Int", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>   "_PyCObject_FromVoidPtr", referenced from:
>       _fortran_getattr in fortranobject.o
>   "_PyObject_GetAttrString", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>   "_PyErr_Print", referenced from:
>       _init_fftpack in _fftpackmodule.o
>       _F2PyDict_SetItemString in fortranobject.o
>   "_PyString_Type", referenced from:
>       _PyString_Type$non_lazy_ptr in _fftpackmodule.o
>   "__Py_NoneStruct", referenced from:
>       __Py_NoneStruct$non_lazy_ptr in _fftpackmodule.o
>       __Py_NoneStruct$non_lazy_ptr in fortranobject.o
>   "_Py_FindMethod", referenced from:
>       _fortran_getattr in fortranobject.o
>   "_PyString_ConcatAndDel", referenced from:
>       _fortran_getattr in fortranobject.o
>   "_PyErr_Clear", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>       _F2PyDict_SetItemString in fortranobject.o
>   "_Py_InitModule4", referenced from:
>       _init_fftpack in _fftpackmodule.o
>   "_PyModule_GetDict", referenced from:
>       _init_fftpack in _fftpackmodule.o
>   "_PyExc_RuntimeError", referenced from:
>       _PyExc_RuntimeError$non_lazy_ptr in _fftpackmodule.o
>       _PyExc_RuntimeError$non_lazy_ptr in fortranobject.o
>   "_PyDict_DelItemString", referenced from:
>       _fortran_setattr in fortranobject.o
>   "_PyObject_Type", referenced from:
>       _array_from_pyobj in fortranobject.o
>   "_PySequence_Check", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>   "_PyString_AsString", referenced from:
>       _array_from_pyobj in fortranobject.o
>   "_PySequence_GetItem", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>   "_PyErr_SetString", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_drfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zrfft in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _f2py_rout__fftpack_zfftnd in _fftpackmodule.o
>       _init_fftpack in _fftpackmodule.o
>       _array_from_pyobj in fortranobject.o
>       _fortran_setattr in fortranobject.o
>       _fortran_setattr in fortranobject.o
>   "_PyType_IsSubtype", referenced from:
>       _int_from_pyobj in _fftpackmodule.o
>       _int_from_pyobj in _fftpackmodule.o
>       _int_from_pyobj in _fftpackmodule.o
>       _array_from_pyobj in fortranobject.o
> ld: symbol(s) not found
> 
> Any ideas?

No one has implemented the correct link flags for the g95 compiler on the OS X 
platform. They are probably similar to those required for gfortran. Look in 
numpy/fcompiler/gnu.py for the gfortran implementation (Gnu95FCompiler and its 
superclass GnuFCompiler) to port it to numpy/fcompiler/g95.py. Also double-check 
if you have the environment variable LDFLAGS set. It overrides the link flags 
entirely, including those added by Python itself to link to the Python framework.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco



More information about the SciPy-User mailing list