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

Prof Brian Ripley ripley at stats.ox.ac.uk
Mon Dec 12 14:37:28 CET 2011


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