[Rd] Compiling 64bit static library for Windows (Rtools33, MSYS2, cross-compile on linux)

Prof Brian Ripley
Sat, 30 May 2015 19:06:13 -0000

On 30/05/2015 13:14, Duncan Murdoch wrote:
> On 29/05/2015 4:16 PM, Sue McDonald wrote:
>> My apologies for cross-posting. I found this site, after I had posted
on
>> stack-overflow.
>>
>> I need to compile several static libraries (C & Fortran) which will
later
>> be linked with an R package. Rtools33 directory includes
/i686-w64-mingw32
>> directory which I understand creates 32 bit binaries. Yet, there are
other
>> 64 bit directories as well.
>
> The current Rtools is set up for multilib operation.  You only need to
> use the binaries in Rtools/gcc-4.6.3/bin.  The executables there will
> choose files from the other directories depending on the -m32 or -m64
> flag, for 32 bit or 64 bit operation.
>
>>
>> I have three related questions:
>>
>>     1.
>>
>>     Can Rtools33 be used to compile static libraries as a separate step
>>     using -m64 flag?
>
> Yes, I believe so.  They would be 64 bit static libraries.
>
>>     2.
>>
>>     MSYS2 is very convenient for compiling many of these libraries. Can
a
>>     static library compiled with x86_64-w64-mingw32 (gcc 4.9.2) be used
with
>>     Rtools33 (v 4.6.2)?
>
> Rtools uses 4.6.3, not 4.6.2.  I would assume the runtime libraries are
> different between 4.6.3 and 4.9.2, so you won't be able to mix versions
> like that.
>
> However, you should be able to use your MSYS2 system for all
> compilation, if you create a MkRules.local file with the right settings.
>   You will need to compile R and all packages and libraries using that
> system, don't expect to be able to mix binaries from different versions
> of gcc.
>
>
>>     3.
>>
>>     Can a static library compiled using x86_64-w64-mingw32-gcc
>>     cross-compiler (v 4.6.2) on linux be used with Rtools33?
>
> Some libraries used by packages are compiled by Brian Ripley using a
> cross-compiler on linux.  I'd assume he's using 4.6.3 as with the
Rtools
> build, but I'm not sure about that.

Correct, I used the cross-compiler that was used to compile the native
compilers in Rtools.

My experience (this had to work for thousands of packages for CRAN) is
that only an exact match for the cross-compiler to the compiler used to
compile R works reliably.  Even very slightly different builds can cause
segfaults.

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford
1 South Parks Road, Oxford OX1 3TG, UK