Apologies if this has appeared before, but I've searched the archives and all 
the documentation and I can't find anything which helps.

I'm trying to build a DLL under windows. The process (more on that later) works 
fine under Linux and gives the illusion of working under Windows, but 
attempting to load the resulting DLL using dyn.load results in:

Error in inDL(x, as.logical(local), as.logical(now), ...) :
  unable to load shared library: 'C:/Documents... '
  LoadLibrary failure: Invalid access to memory location.

Searching Google shows that the LoadLibrary message is unique to R (Or no-one 
else is admitting to it).

The first problem is that the library is actually a wrapper around an existing 
library to make it usable under R, but the original library is built as a 
static object (and for reasons of controlling exciting versioning problems, I'd 
prefer it to stay that way).

Under Linux, I pass the library to gcc using PKG_LIBS=-static lib.a and it 
builds fine.

Under Windows, I put the following in Makevars.win:
PKG_LIBS -Lc:/Path/To/Library -llib.name
and it builds fine (GCC returns with no errors and I have what appears to be an 
appropriately sized DLL in the directory).

I've tried passing various flags into gcc, but I really don't know what I'm 
doing at this point with regard to building under windows (I have a pretty good 
grasp of how to compile libraries under Linux, and understand the concepts 
involved in shared libraries. I get the impression however that I'm missing 
something about Windows DLLs.

Compulsory version information:
OS: Windows XP SP2
R: 2.8.1
GCC: 4.2.1-sjlj (mingw32-2) (From Rtools29.exe)

For the record, I've read 
http://www.stats.uwo.ca/faculty/murdoch/software/compilingDLLs/readme.packages.txt
 which hints at some requirement for DLLs to use _cdecl. I've started exploring 
along this line, but there's a lot of documentation to trawl through to make 
sense of it all and I don't want to go off chasing a red herring if I just need 
to pass a special --make-it-work flag to gcc.

In the only thread I found which appeared to have any similarities, Prof. 
Ripley said that there was a solution (or hint): "It is there, unfortunately 
along with a lot of uniformed speculation." Of course, the uninformed 
speculation is still in the archives making it no easier to find no than in 
August 2007! Perhaps someone who understands this stuff (or has some experience 
of it) could provide a hint as to how to proceed. :-)

Thanks in advance.

-- 
Jon Senior <j...@restlesslemon.co.uk>

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

Reply via email to