On 12.12.2011 21:12, ruipbarra...@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 <rip...@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, ruipbarra...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


--
Brian D. Ripley, rip...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to