From hin-tak.leung at cimr.cam.ac.uk  Wed Apr  5 13:17:14 2006
From: hin-tak.leung at cimr.cam.ac.uk (Hin-Tak Leung)
Date: Wed, 05 Apr 2006 12:17:14 +0100
Subject: [Rd] Integration of C and Fortran
In-Reply-To: <Pine.LNX.4.64.0604041052090.3947@gannet.stats.ox.ac.uk>
References: <p06230905c05711d5d338@[192.168.0.110]>
	<Pine.LNX.4.64.0604041052090.3947@gannet.stats.ox.ac.uk>
Message-ID: <4433A73A.4070907@cimr.cam.ac.uk>

Prof Brian Ripley wrote:
> Is
> 
>>        the enter point Fortran "orderdata_" absent of the loading table.
> 
> a manual translation, and was the underscore there in the original (I 
> think it should be, but am just checking).

The extra underscore added is the default behavior of many fortran 
compilers, to avoid symbol name collision - I believe this is
actually mentioned very briefly in "writing R extensions" - here is
the details from the relevant section of the documentation of
gfortran (gcc 4.x's fortran front end):

=======================================
Options for Code Generation Conventions

`-fno-underscoring'
      Do not transform names of entities specified in the Fortran source
      file by appending underscores to them.

      With `-funderscoring' in effect, `gfortran' appends one underscore
      to external names with no underscores.  This is done to ensure
      compatibility with code produced by many UNIX Fortran compilers.

      ....

      Use of `-fno-underscoring' is not recommended unless you are
      experimenting with issues such as integration of (GNU) Fortran into
      existing system environments (vis-a-vis existing libraries, tools,
      and so on).

      ....

`-fsecond-underscore'
      By default, `gfortran' appends an underscore to external names.
      If this option is used `gfortran' appends two underscores to names
      with underscores and one underscore to external names with no
      underscores ...
===================================

> 
> What do nm -g mpackage.so tell you is actually exported from the shared 
> object (here called 'mypackage.so')?  I suspect that will reveal a 
> mismatch of names.
> 
> On Mon, 3 Apr 2006, Sebastien Durand wrote:
> 
>> Dear all,
>>
>> I am running R : Copyright 2005,
>> Version 2.2.1  (2005-12-20 r36812)
>> ISBN 3-900051-07-0
>> On a mac 10.4.5
>>
>> I am having trouble with my package.
>>
>> The trouble is the following:
>>
>> In my package I have integrated three files in my src folder.
>> 1- simplematch.C a .C file
>> 2- ordering.f a fortran file
>> 3- Makevars :  PKG_LIBS =  $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
>> I am not sure if that last file is really useful!?
>>
>> When I use the R CMD SHLIB command on both these
>> source code files, the resulting compiled  .so
>> files when loads fine with the dyn.load function.
>> At last when I use either the
>> .C("simplematch",...) and
>> .Fortran("ordering",...) command everything
>> works...
>>
>> Now here comes trouble:
>>
>> When I do the R CMD INSTALL command, my package install.
>> The .C command works but when I run the .Fortran command I get:
>>
>> Error in .Fortran("orderdata", d = as.double(d),
>> as.integer(n), rowscore = as.double(rowscore)) :
>>     the enter point Fortran "orderdata_" absent of the loading table.
>>
>> What should I do to make sure that upon the installation of my package my
>> Fortran function will appear in the load table...
>>
>> Thanks a lot.
>>
>> S?bastien Durand
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
> 
> 
> ------------------------------------------------------------------------
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Integration of C and Fortran
Hin-Tak Leung