[Rd] R CMD check --force-biarch
simon.urbanek at r-project.org
Fri Oct 19 16:00:46 CEST 2012
On Oct 18, 2012, at 12:17 PM, Russell G. Almond wrote:
> I'm having problems getting R CMD check to work correctly on Windows 7 (64 bit) in a package that uses C code. What I want to do is to be able to pass the equivalent of the "--force-biarch" option to check, but this is only supported for INSTALL.
> I'm writing a package (RNetica) which forms a link between R and a third-party library (Netica.dll). The vendor supplies this library in both a 32 bit and a 64 bit version.
> Under Linux, I use configure to link against the 32 or 64 bit version of libnetica.a as appropriate.
> Under Windows, I use configure.win to copy the 32 and 64 bit versions to "$R_PACKAGE_DIR/libs/i386" and "$R_PACKAGE_DIR/libs/x64" respectively.
> This mostly works. If I run R CMD INSTALL RNetica, R detects the configure.win and only builds the 64 bit version of RNetica. [I'm not entirely clear on why R doesn't at least try to build both architectures. Wouldn't the default assumption be that the author wrote the configure.win file to handle both cases?]
No, it's not configure's job to detect anything but the current architecture. Typically it needs to modify files so it can only modify them for one architecture. Your use of configure is very odd since you don't actually configure the package, you are copying dependencies into installation directories (so you can't even test it without override - that's very unusual and a bit questionable).
> But if I use R CMD INSTALL RNetica --force-biarch, it correctly builds and installs both the 32 and 64 bit versions. I can verify that I can load my library and call a few functions that exercise the DLL.
> When I run R CMD check RNetica, I get the following problem in my 00install.out log:
>> Warning: this package has a non-empty 'configure.win' file,
>> so building only the main architecture
> It then fails with the message:
>> Error: .onLoad failed in loadNamespace() for 'RNetica', details:
>> Call: library.dynam("RNetica",pkgname, libname)
>> Error: DLL 'RNetica' not found: maybe not installed for this architecture?
> Sure enough, if I check the directory RNetica.Rcheck/RNetica/libs/x64
> It has Netica.dll, RNetica.dll, and symbols.rds
> If I check the directory RNetica.Rcheck/RNetica/libs/i386
> It only has Netica.dll (copied there by the configure.win).
> If I run R CMD check RNetica --no-multiarch, this test runs correctly.
> If I run R CMD check RNetica --extra-arch, this fails at the same point.
You probably mean to use R --arch i386 to check your 32-bit version - architectures are normally tested separately.
> Thanks in advance for any help.
> Russell Almond
> almond at acm.org
> Russell G. Almond
> 12065 Cedar Bluff Trail
> Tallahassee, FL 32312
> almond at acm.org
> [[alternative HTML version deleted]]
> R-devel at r-project.org mailing list
More information about the R-devel