[Rd] Problems in building a DLL in 64-bit Windows

Uwe Ligges ligges at statistik.tu-dortmund.de
Mon Dec 12 21:28:38 CET 2011



On 12.12.2011 21:12, ruipbarradas at sapo.pt wrote:
> 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

DOS is not supported by R. I believe you are talking about the Windows 
command shell (and that allows copy and paste!).


 > 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

If you type gcc and do not need to change the name, you pretty likely 
use a 32-bit compiler. At least not a 32-bit one from the Rtools.



> 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

Sure, since a 32-bit compiler does not know about 64-bit binaries.

Uwe Ligges



> (-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
>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list