[Rcpp-devel] RcppEigen-related compilation error for Windows i386

Evan Biederstedt evan.biederstedt at gmail.com
Sat Sep 19 21:40:01 CEST 2020


Hi Dirk and friends

Thanks for the help. In my attempt to isolate the issue, I wonder if
there's an issue with linking to RcppSpdlog.

I tried compiling with "LinkingTo: Rcpp, RcppEigen, RcppSpdlog", and the
error exists:
https://win-builder.r-project.org/F2g5vjpw6M1T
https://github.com/kharchenkolab/N2R/tree/341fe9ff37a0f3082e1daff03d4b01ecf03d83b2

But when I remove `RcppSpdlog`, it successfully compiles:
https://win-builder.r-project.org/G0PRavw4yuhZ/
https://github.com/kharchenkolab/N2R/commit/fd49332c6c25655e0926b0935c9741ff8adcfecf

Could this be some issues with linking to both RcppEigen and RcppSpdlog?
Issues with RcppSpglog windows binaries?

As some background, I was using the spdlog library directly, which compiles
correctly on windows as well:
https://github.com/kharchenkolab/N2R/tree/338f380df4c49da76c797f2e5a3791f978c64156
https://win-builder.r-project.org/ju94MKp8YSD5/

I wanted to switch to RcppSpdlog to stop the CRAN notes/warnings.


*> That is worse. It seems to rely on 64bit layout. Yet is uses 'int' as
opposed to 'int64_t' which would hardwire the size.> Is the 'int' under
your control?  Can you make that an int64_t?*

So the above makes me wonder if there's an issue linking to RcppSpdlog and
RcppEigen, because there are no issues with 64-bit otherwise.

I'm not making extensive or complicated calls with spdlog either:
https://github.com/kharchenkolab/N2R/blob/master/src/n2/hnsw.cc#L67-L71

Just 'spdlog::get()' and either 'spdlog::stdout_logger_mt()' (in the
standard spdlog library) or 'spdlog::r_sink_mt()' (in the RcppSpdlog
library).

Hopefully the above is clear, and thanks for any insight.
Best, Evan


On Sat, Sep 19, 2020 at 1:01 PM Dirk Eddelbuettel <edd at debian.org> wrote:

>
> Hi Evan,
>
> On 19 September 2020 at 10:14, Evan Biederstedt wrote:
> | I'm in the process uploading an R package to CRAN, which is a relatively
> | simple interface to a C++ library: https://github.com/kharchenkolab/N2R
> |
> | The windows binaries just became available for RcppSpdLog, so I wanted to
> | check how it installed on windows before CRAN submission.
> |
> | The package currently installs on Linux and Mac OS, but when I check with
> | `devtools::check_win_devel()`, I'm getting a Windows-related error.
> |
> | The error appears to be related to RcppEigen, not the C++ library---this
> | feels like something easily fixable, but I'm a bit nonplussed how to fix
> | this:
> |
> | """
> |
> |
> d:/RCompile/CRANpkg/lib/4.1/RcppEigen/include/Eigen/src/Core/DenseCoeffsBase.h:650:34:
> | warning: ignoring attributes on template argument
> | 'Eigen::internal::packet_traits<int>::type' {aka '__vector(2) long
> | long int'} [-Wignored-attributes]
> |
> |    return
> internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);
> |
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> | make: *** [D:/RCompile/recent/R/etc/i386/Makeconf:244: n2knn.o] Error 1
> | ERROR: compilation failed for package 'N2R'
> | * removing 'd:/RCompile/CRANguest/R-devel/lib/N2R'
> | * restoring previous 'd:/RCompile/CRANguest/R-devel/lib/N2R'
> |
> | """
> |
> | "'Eigen::internal::packet_traits<int>::type' {aka '__vector(2) long long
> | int'} [-Wignored-attributes]" appears to be a somewhat standard warning,
>
> Right. Eigen is very verbose. For my local compilations I often set
> something
> like this in ~/.R/Makevars (uncommented, of course, and later in the file
> used in CXX*FLAGS):
>
>   #PEDANTIC=-pedantic -DBOOST_NO_AUTO_PTR -Wno-ignored-attributes
>   #PEDANTIC= -DBOOST_NO_AUTO_PTR -Wno-sign-compare -Wno-parentheses
> -Wno-maybe-uninitialized
>
>
> | but I'm not sure how to resolve
> |
> "internal::first_aligned<int(unpacket_traits<DefaultPacketType>::alignment),Derived>(m);"
> | which is causing the compilation error.
>
> That is worse. It seems to rely on 64bit layout. Yet is uses 'int' as
> opposed
> to 'int64_t' which would hardwire the size.
>
> Is the 'int' under your control?  Can you make that an int64_t?
>
> I don't have any other suggestions. :-/
>
> Dirk
>
> | I've tried with C++11 and C++14; same result. I've seen some discussion
> | elsewhere that this could be related to the -fopenmp flags here:
> | https://github.com/kharchenkolab/N2R/blob/master/src/n2/Makefile
> | Perhaps there's something here which clashes with RcppEigen on windows?
> |
> | Any help is appreciated. Here is the CRAN builds:
> | https://win-builder.r-project.org/D98h1Y2Rr004/
> |
> | Best, Evan
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> --
> https://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20200919/e2a1e112/attachment.html>


More information about the Rcpp-devel mailing list