[Rd] Problems in building a DLL in 64-bit Windows
ruipbarradas at sapo.pt
ruipbarradas at sapo.pt
Mon Dec 12 21:12:52 CET 2011
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
>
More information about the R-devel
mailing list