From ripley at stats.ox.ac.uk  Sat May 30 21:06:13 2015
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat, 30 May 2015 20:06:13 +0100
Subject: [Rd] Compiling 64bit static library for Windows (Rtools33, MSYS2,
 cross-compile on linux)
In-Reply-To: <5569A990.7020004@gmail.com>
References: <CAOkNWZUga3MvKMn0K2i01U2dWZ+3LuLDp-v4u0WXjtTV_7y3Ew@mail.gmail.com>
	<5569A990.7020004@gmail.com>
Message-ID: <556A0A25.5050001@stats.ox.ac.uk>

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



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