From Simon.Urbanek at math.uni-augsburg.de  Thu Oct 23 14:21:08 2003
From: Simon.Urbanek at math.uni-augsburg.de (Simon Urbanek)
Date: Thu Oct 23 14:20:28 2003
Subject: [Rd] linking to R.dll on Win32 - issues with recent MinGW?
Message-ID: <61B2C492-0553-11D8-BE10-000A957CEFBA@math.uni-augsburg.de>

I encountered several strange issues when linking to R.dll on Windows 
and I wonder if anyone of the Windows savvy-folks here had seen some of 
the issues before and have some explanation.

My Rserve links to R dynamic library. That works perfectly on unix 
boxes and worked fairly well with older MinGW and older R (<=1.7.1). 
What I do in fact is that I specify
-L$(R_HOME)/bin -lR
when linking. This produced valid exe which was linked to R.dll. In 
fact you could compile everything with the regular binary distribution 
of R, even without R sources (MinGW got all it needs directly from 
R.dll).

Now with R-1.8.0 (which is presumably compiled with more recent MinGW) 
and MinGW 3.1 this doesn't work anymore on certain Win32 platforms, 
e.g. I got reports that on W2k Rserve bails out with "Can't load 
R.dll". Further investigation reveals that the .exe tries to load "R" 
file and not "R.dll". But if you copy R.dll to R then both R and R.dll 
get loaded, since R loads Rblas.dll which loads (correctly) R.dll. Then 
everything crashes (presumably the two dlls fight each other). XP seems 
to have a fix for that (i.e. a request for "R" will in fact load 
"R.dll"), but not W2k.

Did anyone see this or does anyone have an idea how to prevent this 
(except for downgrading MinGW)?

Now, I thought I'll use libR.a from the R sources instead of using the 
final R.dll, because that's what libR.a is for, right? The first 
obstacle was that libR.a doesn't export R_Home which I need to set in 
my init routine, but fortunately there is "exported-vars" for that 
case. But after finally compiling everything, Rserve crashes. It 
doesn't even get as far as main. What I get is this:
Warning: Invalid Address specified to RtlSizeHeap( 003F0000, 0146008 )
and later a crash somewhere deep in libwsock32 (the trace is rather 
weird) ... I guess the problem is the heap, not wsock itself. Any idea 
what that could be?

All the above was tested with MinGW-3.1.
Any ideas? Is that a MinGW bug or something I did? ;)

Thanks.
Simon

---
Simon Urbanek
Department of computer oriented statistics and data analysis
University of Augsburg
Universit?tsstr. 14
86135 Augsburg
Germany

Tel: +49-821-598-2236
Fax: +49-821-598-2200

Simon.Urbanek@Math.Uni-Augsburg.de
http://simon.urbanek.info


[Rd] linking to R.dll on Win32 - issues with recent MinGW?
Simon Urbanek