[R-SIG-Mac] Which gfortran for Leopard?

cstrato cstrato at aon.at
Tue Jan 26 21:24:38 CET 2010


Dear Simon,

Meanwhile I have tried to install xps:
$ R CMD INSTALL -l ~/Library/R/2.10/library xps_1.7.4.tar.gz
* installing *source* package 'xps' ...
checking for gcc... gcc-4.2 -arch i386 -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc-4.2 -arch i386 -std=gnu99 accepts -g... yes
checking for gcc-4.2 -arch i386 -std=gnu99 option to accept ANSI C... 
none needed
checking how to run the C preprocessor... gcc-4.2 -arch i386 -std=gnu99 -E
checking for gcc... (cached) gcc-4.2 -arch i386 -std=gnu99
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc-4.2 -arch i386 -std=gnu99 accepts -g... (cached) yes
checking for gcc-4.2 -arch i386 -std=gnu99 option to accept ANSI C... 
(cached) none needed
found ROOT version 5.24/00 in directory /Users/rabbitus/ROOT/root
** libs
** arch - i386

As you can see it compiles using the wrong architecture:
 > library(xps)
Error in dyn.load(file, DLLpath = DLLpath, ...) :
  unable to load shared library 
'/Users/rabbitus/Library/R/2.10/library/xps/libs/i386/xps.so':
  dlopen(/Users/rabbitus/Library/R/2.10/library/xps/libs/i386/xps.so, 
6): no suitable image found.  Did find:
        /Users/rabbitus/Library/R/2.10/library/xps/libs/i386/xps.so: 
mach-o, but wrong architecture
Error: package/namespace load failed for 'xps'
 >

In my file "config.in" I have the following lines:
# See "Writing R Extensions"
: ${R_HOME=`R RHOME`}
if test -z "${R_HOME}"; then
   echo "could not determine R_HOME"
   exit 1
fi
CC=`"${R_HOME}/bin/R" CMD config CC`
CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS`
AC_PROG_CPP
AC_PROG_CC

Thus I assume that I need to use 64 bit R so that the flags are set 
correctly. Is this correct?

If yes, can I use: 
http://r.research.att.com/R-GUI-5548-2.10-leopard-Leopard64.dmg
or do I need to build 64 bit R from source?

Best regards
Christian


Simon Urbanek wrote:
> On Jan 25, 2010, at 5:34 PM, cstrato wrote:
>
>   
>> Dear Simon,
>>
>> Thank you, with this version I could finally compile ROOT as 64 bit.
>>
>> Now I have one more question:
>> When I do "R CMD Install xps.tar.gz" which now depends on 64 bit ROOT, do I need to install the 64 bit version of R or can I use the current R version?
>>
>>     
>
> I have no idea since I don't know your package. If you *link* to ROOT then yes, you have to use 64-bit R to load 64-bit code. (Linking in itself can be quite interesting given the flags ROOT uses, so your journey may not end there ;)).
>
> Cheers,
> Simon
>
>
>
>   
>> Best regards
>> Christian
>>
>>
>> Simon Urbanek wrote:
>>     
>>> On Jan 25, 2010, at 15:03 , cstrato wrote:
>>>
>>>       
>>>> Dear Simon,
>>>>
>>>> Thank you for your suggestions, which I have just tried. Sadly the error remains the same.
>>>>
>>>> The problem seems to be that for some reason "gfortran-4.2-5564-darwin9.tar.gz" does not have a "/usr/lib/gcc/i686-apple-darwin9/4.2.1/x86_64" directory containing libgfortranbegin.a. For this reason the 64 bit version of libgfortranbegin.a is not installed in the corresponding directory x86_64 which contains only libgcc.a etc.
>>>>
>>>>         
>>> Oh ... that's a surprise - it should be there, sorry. Ok, so please use the more recent 5566 build:
>>> http://r.research.att.com/tools/gfortran-4.2-5566-darwin9.tar.gz
>>>
>>> that one has the x86_64 files - I checked:
>>> ginaz:~$ curl -s -S http://r.research.att.com/tools/gfortran-4.2-5566-darwin9.tar.gz | tar fvtz - | grep gfortran.a
>>> -rw-r--r-- root/wheel  3592608 2008-12-24 14:51:33 usr/lib/gcc/i686-apple-darwin9/4.2.1/libgfortran.a
>>> -rw-r--r-- root/wheel  3870032 2008-12-24 14:51:33 usr/lib/gcc/powerpc-apple-darwin9/4.2.1/libgfortran.a
>>> -rw-r--r-- root/wheel  5002152 2008-12-24 14:51:33 usr/lib/gcc/i686-apple-darwin9/4.2.1/x86_64/libgfortran.a
>>>
>>> (Ideally you should install Xcode 3.1.2 for this since that is where the 5566 build comes from, but it will probably work even if the builds don't match perfectly).
>>>
>>> Cheers,
>>> Simon
>>>
>>>
>>>
>>>       
>>>> You can see this by double-clicking on "gfortran-4.2-5564-darwin9.tar.gz" when located in some directory.
>>>>
>>>> In contrast, "gfortran-4.2.3.dmg" did install libgfortranbegin.a in the "/usr/local/lib/gcc/i686-apple-darwin9/4.2.1/x86_64" directory.
>>>>
>>>> Could you please check or tell me what the reason might be?
>>>>
>>>> I have installed it using:
>>>> $ gunzip gfortran-4.2-5564-darwin9.tar.gz
>>>> $ sudo tar -xvf gfortran-4.2-5564-darwin9.tar -C /
>>>>
>>>> Best regards
>>>> Christian
>>>>
>>>>
>>>> Simon Urbanek wrote:
>>>>         
>>>>> On Jan 24, 2010, at 3:28 PM, cstrato wrote:
>>>>>
>>>>>
>>>>>           
>>>>>> Dear Kasper,
>>>>>>
>>>>>> You are right. Since ROOT supports the CC, CXX, F77 and LD flags I did:
>>>>>> ./configure macosx64 --with-cxx="/usr/bin/g++-4.2 -arch x86_64" --with-f77="/usr/bin/gfortran-4.2 -arch x86_64"
>>>>>>
>>>>>>
>>>>>>             
>>>>> You don't really need the override - it works without and they add -m64 anyway so the -arch gets essentially ignored.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> The error was still the same:
>>>>>> i686-apple-darwin9-g++-4.2.1: libgfortran.dylib: No such file or directory
>>>>>>
>>>>>> However, when I replaced in the Makefile.macosx64:
>>>>>> F77LIBS      := $(shell $(F77) -m64 -print-file-name=libgfortran.dylib)
>>>>>> F77LIBS      += $(shell $(F77) -m64 -print-file-name=libgfortranbegin.a)
>>>>>> with:
>>>>>> F77LIBS      := $(shell $(F77) -m64 -print-file-name=libgfortranbegin.a)
>>>>>>
>>>>>>             
>>>>> You found the right spot but your fix is wrong - just remove the two lines, they are superfluous and only cause trouble.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> the error disappeared, and I could finish the compilation.
>>>>>>
>>>>>> However, now I got a link-error:
>>>>>> ld warning: in /usr/lib/gcc/i686-apple-darwin9/4.2.1/libgfortranbegin.a, file is not of required architecture
>>>>>> Undefined symbols:
>>>>>> "_main", referenced from:
>>>>>>   start in crt1.10.5.o
>>>>>>
>>>>>>
>>>>>>             
>>>>> Your'e getting the 32-bit version (of the wrong file - see above). It should really be ../4.2.1/x86_64/lib...
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> I am not sure what this error means since Makefile.macosx64 contains:
>>>>>> F77FLAGS      = -m64 -std=legacy
>>>>>>
>>>>>> Could it be that libgfortranbegin.a can only be used for 32bit compilation?
>>>>>>
>>>>>>
>>>>>>             
>>>>> No, you're picking the wrong one - there is one for each architecture.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> Furthermore, I still have the question (and hopefully Simon will answer it):
>>>>>> Why does gfortran-4.2-5564-darwin9.tar.gz not contain any libgfortran.dylib files?
>>>>>>
>>>>>>
>>>>>>             
>>>>> Because it's using a static library.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> Interestingly, when googling "/usr/lib/libgfortran.dylib" I get the answer that NO results were found, while googling "/usr/local/lib/libgfortran.dylib" gives many results. Thus it seems that there will never be any libgfortran.dylib in "/usr/lib/"!?
>>>>>>
>>>>>>             
>>>>> Nope - OS X has no Fortran by default.
>>>>>
>>>>> Cheers,
>>>>> Simon
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> I must admit that I do not understand this issue.
>>>>>>
>>>>>> Best regards
>>>>>> Christian
>>>>>>
>>>>>>
>>>>>> Kasper Daniel Hansen wrote:
>>>>>>
>>>>>>             
>>>>>>> On Jan 23, 2010, at 8:37 AM, cstrato wrote:
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Dear Kasper,
>>>>>>>>
>>>>>>>> Thank you for your suggestion, I did indeed use gcc 4.0.
>>>>>>>> Since gcc_select does no longer exist on Leopard I had to do:
>>>>>>>> cd /usr/bin
>>>>>>>> sudo ln -s gcc-4.2 gcc
>>>>>>>> sudo ln -s g++-4.2 g++
>>>>>>>> sudo ln -s gcov-4.2 gcov
>>>>>>>>
>>>>>>>>                 
>>>>>>> I am not sure this is advisable in general.  When I compile stuff with gcc-4.2 I usually explicitly set
>>>>>>> CC=/usr/bin/gcc-4.2
>>>>>>> when I run configure.  For example, my entire configure line for R on my macbook is
>>>>>>> ../${SRCDIR}/configure SHELL='/bin/bash' \
>>>>>>>          CC="/usr/bin/gcc-4.2 -arch x86_64 -std=gnu99" \
>>>>>>>          CFLAGS="-g -O2 -std=gnu99 -march=nocona" \
>>>>>>>          CXX="/usr/bin/g++-4.2 -arch x86_64" \
>>>>>>>          CXXFLAGS="-g -O2 -march=nocona" \
>>>>>>>          OBJC="/usr/bin/gcc-4.2 -arch x86_64" \
>>>>>>>          F77="/usr/bin/gfortran-4.2 -arch x86_64" \
>>>>>>>          FFLAGS="-g -O2 -march=nocona" \
>>>>>>>          FC="/usr/bin/gfortran-4.2 -arch x86_64" \
>>>>>>>          FCFLAGS="-g -O2 -march=nocona" \
>>>>>>>          --x-includes=/usr/X11/include --x-libraries=/usr/X11/lib \
>>>>>>>          --with-system-zlib \
>>>>>>>          --with-blas='-framework vecLib' --with-lapack
>>>>>>>  Of course this requires that ROOT uses the CC/CFLAGS macros, but that should be pretty standard if it uses autoconf.
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Sadly, compiling ROOT resulted still in the same error:
>>>>>>>> i686-apple-darwin9-g++-4.2.1: libgfortran.dylib: No such file or directory
>>>>>>>>
>>>>>>>> When I check the location for gfortran-4.2.3.dmg I get:
>>>>>>>> $ cd /usr/local/lib/gcc/i686-apple-darwin8/4.2.3/../../../x86_64
>>>>>>>> $ ls -al
>>>>>>>> total 32
>>>>>>>> drwxrwxr-x   6 root  wheel   204 Jan 21 20:26 .
>>>>>>>> drwxr-xr-x  35 root  wheel  1190 Jan 21 20:26 ..
>>>>>>>> lrwxr-xr-x   1 root  wheel    26 Jan 21 20:26 libgfortran.2.0.0.dylib -> ../libgfortran.2.0.0.dylib
>>>>>>>> lrwxr-xr-x   1 root  wheel    23 Jan 21 20:26 libgfortran.2.dylib -> libgfortran.2.0.0.dylib
>>>>>>>> lrwxr-xr-x   1 root  wheel    16 Jan 21 20:26 libgfortran.a -> ../libgfortran.a
>>>>>>>> lrwxr-xr-x   1 root  wheel    23 Jan 21 20:26 libgfortran.dylib -> libgfortran.2.0.0.dylib
>>>>>>>>
>>>>>>>> This means that /usr/local/bin does contain libgfortran.dylib whereas /usr/bin does not contain any of these files or links.
>>>>>>>> Does this mean that gfortran-4.2.3.dmg does contain these file for libgfortran.dylib while gfortran-4.2-5564-darwin9.tar.gz does not contain these files?
>>>>>>>> How do I get libgfortran.dylib?
>>>>>>>>
>>>>>>>>                 
>>>>>>> Simon might be able to answer this better, but the general idea is that the
>>>>>>>               
>>>>>>>> gfortran-4.2-5564-darwin9.tar.gz
>>>>>>>>
>>>>>>>>                 
>>>>>>> installs into /usr/bin
>>>>>>>
>>>>>>>               
>>>>>>>> gfortran-4.2.3.dmg
>>>>>>>>
>>>>>>>>                 
>>>>>>> installs into /usr/local/bin.  There is some logic here, the way I think about it is that the former is a direct extension of the Apple build.
>>>>>>>
>>>>>>> I would start from scratch, which means remove all traces of both gfortrans, install the 5564-tarball and then set the various macros as I have set it above for R (your exact values may of course be different depending on what machine etc. you are using).
>>>>>>>
>>>>>>> Kasper
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> BTW, I must apologize to Simon. On his website he lists the commands how to install gfortran.tar.gz, but in the Tiger section, so I did miss it. Nevertheless it would still be helpful for Mac users to know how to uninstall it:
>>>>>>>> $ tar -tf gfortran.tar | sort -r | (cd /; xargs -p -n 1 rm -d)
>>>>>>>>
>>>>>>>> Best regards
>>>>>>>> Christian
>>>>>>>>
>>>>>>>>
>>>>>>>> Kasper Daniel Hansen wrote:
>>>>>>>>
>>>>>>>>                 
>>>>>>>>> Remember that Apple has two version of GCC on Leopard: 4.0 and 4.2.  You are using 4.0, you might want to switch to 4.2.  In Tiger there used to be gcc_select (or select_gcc) that let you choose between 3.x and 4.0, I don't remember if that is still around on Leopard.
>>>>>>>>>
>>>>>>>>> The error seems to indicate that you need 4.2 in order to use Simon's gfortran.
>>>>>>>>>
>>>>>>>>> Kasper
>>>>>>>>>
>>>>>>>>> On Jan 22, 2010, at 16:04 PM, cstrato wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>                   
>>>>>>>>>> Dear Simon,
>>>>>>>>>>
>>>>>>>>>> Thank you for this information.
>>>>>>>>>>
>>>>>>>>>> Now I have installed gfortran-4.2-5564-darwin9.tar.gz on Leopard and tried to compile ROOT again, but this time I got the following error:
>>>>>>>>>> g++ -dynamiclib -single_module -undefined dynamic_lookup -install_name @rpath/libminicern.so -O2 -m64 -o lib/libminicern.so misc/minicern/src/cernlib.o -ldl misc/minicern/src/hbook.o misc/minicern/src/kernlib.o misc/minicern/src/zebra.o libgfortran.dylib /usr/lib/gcc/i686-apple-darwin9/4.2.1/libgfortranbegin.a
>>>>>>>>>> i686-apple-darwin9-g++-4.0.1: libgfortran.dylib: No such file or directory
>>>>>>>>>>
>>>>>>>>>> I know that this is not necessarily an R-related question but I would greatly appreciate your help if possible (at least it is a Mac- and somehow a BioC-related question).
>>>>>>>>>>
>>>>>>>>>> When I have tried to compile ROOT with gfortran-4.2.3.dmg I got the following error:
>>>>>>>>>> gfortran -O2 -m64 -o bin/g2root main/src/g2root.o -Llib lib/libminicern.so /usr/local/lib/gcc/i686-apple-darwin8/4.2.3/../../../x86_64/libgfortran.dylib /usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64/libgfortranbegin.a -lm -Wl,-rpath, at loader_path/../lib    -pthread -ldl
>>>>>>>>>> ld: -rpath can only be used when targeting Mac OS X 10.5 or later
>>>>>>>>>>
>>>>>>>>>> As you can see gfortran-4.2.3 could find libgfortran.dylib at:
>>>>>>>>>> /usr/local/lib/gcc/i686-apple-darwin8/4.2.3/../../../x86_64/libgfortran.dylib while gfortran-4.2.4 could not find libgfortran.dylib.
>>>>>>>>>>
>>>>>>>>>> Thus maybe I did make a mistake when installing gfortran-4.2.4. Here is what I did:
>>>>>>>>>> $ gunzip gfortran-4.2-5564-darwin9.tar.gz
>>>>>>>>>> $ sudo tar -xvf gfortran-4.2-5564-darwin9.tar -C /
>>>>>>>>>> $ sudo ln -s /usr/bin/gfortran-4.2 /usr/bin/gfortran
>>>>>>>>>>
>>>>>>>>>> Do you know what I need to do so that libgfortran.dylib can be found?
>>>>>>>>>>
>>>>>>>>>> P.S.:Since many Mac users are no Unix experts please allow me to suggest to place on your website the commands to install/uninstall gfortran. I have found the following website, which told me how to install gfortran and how I could uninstall it:
>>>>>>>>>> http://www.webmo.net/support/fortran_osx.html
>>>>>>>>>>
>>>>>>>>>> Thank you in advance.
>>>>>>>>>> Best regards
>>>>>>>>>> Christian
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Simon Urbanek wrote:
>>>>>>>>>>
>>>>>>>>>>                     
>>>>>>>>>>> On Jan 21, 2010, at 15:56 , cstrato wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>                       
>>>>>>>>>>>> Dear Simon,
>>>>>>>>>>>>
>>>>>>>>>>>> One more question:
>>>>>>>>>>>> I have just unzipped gfortran-4.2-5564-darwin9.tar.gz. The version gives:
>>>>>>>>>>>> Using built-in specs.
>>>>>>>>>>>> Target: i686-apple-darwin9
>>>>>>>>>>>> Configured with: /Builds/gcc/gcc_42-5564/build/obj/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/usr/share/man --enable-languages=c,objc,c++,obj-c++,fortran --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-gxx-include-dir=/usr/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --host=i686-apple-darwin9 --target=i686-apple-darwin9
>>>>>>>>>>>> Thread model: posix
>>>>>>>>>>>> gcc version 4.2.1 (Apple Inc. build 5564)
>>>>>>>>>>>>
>>>>>>>>>>>> This means that this version seems to be older than the one I am using now?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>                         
>>>>>>>>>>> No, that is GNU Fortran 4.2.4 that I was referring to. The "gcc version 4.2.1" comes from Apple's Xcode 3.1 gcc-4.2 branch since that is what they define - it just adds Fortran support to the existing gcc 4.2.1 branch of Apple that you installed as Xcode. However, the Fortran part is merged from the GNU Fortran 4.2.4 release - hence I refer to it as 4.2.4.
>>>>>>>>>>>
>>>>>>>>>>> Cheers,
>>>>>>>>>>> Simon
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>                       
>>>>>>>>>>>> Simon Urbanek wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>                         
>>>>>>>>>>>>> On Jan 21, 2010, at 14:47 , cstrato wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>                           
>>>>>>>>>>>>>> Dear all,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I have the following problem:
>>>>>>>>>>>>>> My Bioconductor package xps requires both R and ROOT, whereby I compile ROOT usually from source. Until now this has not been a problem since I do all my development on Tiger. However, now I wanted to compile ROOT on Leopard but failed since my gfortran compiler is too old, see:
>>>>>>>>>>>>>> http://root.cern.ch/phpBB2/viewtopic.php?t=9721&sid=003b01ddb64f33dbe0c74651ee089c34 To solve the problem I should upgrade to the latest version coming with gcc-4.4 in Fink.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>> I would advise against that - using gcc from Fink usually calls for a disaster. The real solution is to fix their flags, but that's another story ...
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>                           
>>>>>>>>>>>>>> Thus my question is:
>>>>>>>>>>>>>> Can I also use this version for R or do I need to use the version downloaded from att?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>> I would recommend using the Leopard gfortran 4.2.4 for Xcode 3.1.x from the Mac devel page
>>>>>>>>>>>>> http://r.research.att.com/tools/
>>>>>>>>>>>>> which I assume is what you meant by the latter.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>> Simon
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>                           
>>>>>>>>>> _______________________________________________
>>>>>>>>>> R-SIG-Mac mailing list
>>>>>>>>>> R-SIG-Mac at stat.math.ethz.ch
>>>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>>>>>>>>
>>>>>>>>>>                     
>>>>>
>>>>>           
>>>>         
>>>       
>>     
>
>
>



More information about the R-SIG-Mac mailing list