From ruipbarradas at sapo.pt  Mon Dec 12 21:12:52 2011
From: ruipbarradas at sapo.pt (ruipbarradas at sapo.pt)
Date: Mon, 12 Dec 2011 20:12:52 +0000
Subject: [Rd] Problems in building a DLL in 64-bit Windows
In-Reply-To: <alpine.LFD.2.02.1112121332510.29587@gannet.stats.ox.ac.uk>
References: <20111212131228.732736q174vpaxmk@mail.sapo.pt>
	<alpine.LFD.2.02.1112121332510.29587@gannet.stats.ox.ac.uk>
Message-ID: <20111212201252.15986b4k4rjfgj7o@mail.sapo.pt>

Prof. Ripley,

Thank you for your suggestion.
In the mean time, I had just found a solution and was going to send a  
mail saying that the problem was solved
when I read your answer, and others.

The 'ddl' is obviously not the actual output, DOS doesn't allow copy&paste.
The solution is to use the compiler directly,

gcc -c myfun.c -o myfun.o
gcc -LC:/PROGRA~1/R/R-214~1.0/bin/x64 -shared myfun -o myfun64.dll

Note that I didn't write '-lR' and it worked. In fact, when I've tryied
to, it gave an error again, it doesn't recognize  .../bin/x64/R.dll

(-L is overriden by R CMD SHLIB, it puts i386 in the end...)

Once again, thank you for your suggestion, I'll give it a try.

Rui Barradas


Citando Prof Brian Ripley <ripley at stats.ox.ac.uk>:

> What is R.ddl? Or is that not the actual output?
>
> In any case, it isn't going to work unless you run 64-bit 'R', and  
> my guess is that you used 32-bit 'R' to do this.  Make sure you use
>
> ..../bin/x64/R CMD
>
> and you do not need the -L....
>
>
> On Mon, 12 Dec 2011, ruipbarradas at sapo.pt wrote:
>
>>
>> I am trying to build a C language DLL and it works well with i386  
>> but when I compile with it substituted
>> by x64, like the FAQ page says, the result is an error message:
>
> which 'FAQ page' (which FAQ, which page ...)?
>
>> C:/PROGRA~1/R/R-214~1.0/bin/x64/R.ddl: file not recognized : File  
>> format not recognized
>> collect2: ld returned 1 exit status
>>
>> How can I solve this? The problem is with R 2-14.0 and 2-13.0
>>
>> The complete source code is
>>
>> /*
>> * myfun.c
>> */
>> #include <stdio.h>
>> #include <R.h>
>> #include <Rinternals.h>
>> #include <R_ext/Rdynload.h>
>>
>> void myfn(double *x){ *x += 1; }
>>
>> The DLL is build like this:
>>
>> R CMD SHLIB -LC:/PROGRA~1/R/R-214~1.0/bin/x64 -lR myfun.c -o myfun64.dll
>>
>> and get the error message above.
>>
>> The R code:
>>
>> #
>> # myfun.R: this works with i386, but not with x64
>> #
>> dyn.load("myfun64.dll")
>> f <- function(x) {.C("myfn", x=as.double(x))$x}
>> f(1)
>> f(1000)
>> dyn.unload("dllmain.dll")
>>
>> I am trying to build a package, or at least a set of functions, and  
>> performance is sometimes a problem.
>> Thank you,
>>
>> Rui Barradas
>>
>> 	[[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>



[Rd] Problems in building a DLL in 64-bit Windows
ruipbarradas at sapo.pt