【发布时间】:2018-02-07 16:11:12
【问题描述】:
我正在尝试让我的包 (code available here) 通过 win-builder 测试,以便我可以上传到 cran。该包严重依赖 Rcpp,我使用了一些需要 C++11 标准的东西。但win-builder test results 不断显示如下警告:
warning: delegating constructors only available with -std=c++11 or -std=gnu++11
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
我尝试使用 Rcpp.package.skeleton() 示例包进行最小测试,添加了一些扩展的初始化列表使用,以及仅包含一行的 Makevars 文件:
CXX_STD = CXX11
但最小的测试工作正常。您可以在 win-builder 测试结果中看到它使用 -std=gnu++11 编译的最小测试,而我的包是在没有该选项的情况下编译的:
最小测试:
*** arch - i386
d:/Compiler/gcc-4.9.3/mingw_32/bin/g++ -std=gnu++11 -I"D:/RCompile/recent/R/include" -DNDEBUG -I"d:/RCompile/CRANpkg/lib/3.5/Rcpp/include" -I"d:/Compiler/gcc-4.9.3/local330/include" -O2 -Wall -mtune=core2 -c RcppExports.cpp -o RcppExports.o
我的包裹:
*** arch - i386
d:/Compiler/gcc-4.9.3/mingw_32/bin/g++ -I"D:/RCompile/recent/R/include" -DNDEBUG -I"d:/RCompile/CRANpkg/lib/3.5/Rcpp/include" -I"d:/Compiler/gcc-4.9.3/local330/include" -pedantic -O2 -Wall -mtune=core2 -c Individual.cpp -o Individual.o
为什么用不同的选项编译它们?我正在使用完全相同的Makevars 文件。以防万一,我的DESCRIPTION 上有这些行:
Imports:
Rcpp (>= 0.12.14),
Matrix,
grid,
animation
LinkingTo: Rcpp
Suggests:
knitr,
rmarkdown
Depends:
R (>= 3.1.0)
License: GPL-2
LazyData: true
RoxygenNote: 6.0.1
URL: https://github.com/Lobz/facilitation
VignetteBuilder: knitr
编辑:我将以上内容复制到最小测试包的DESCRIPTION 文件中以使它们更加相似,并且最小测试文件仍然可以使用-std=gnu++11 正确编译。
注意:我通过devtools::build_win()将包上传到win-builder。
【问题讨论】:
-
你无法改变win-builder使用
g++ 4.9.3的事实。它具有不完整的 C++11 支持,尤其是在库方面。故事结束。 -
谢谢,@DirkEddelbuettel!知道为什么我的测试编译不同吗?
-
您应该更显着地链接到您的源代码库。乍一看,您错过了
src/Makevars.win文件——如果您使用正确的包创建帮助器(我们为其记录了两个不同的帮助器),则不会发生这种情况。 -
再次感谢@DirkEddelbuettel。我正在调查它。我不知道那些存在。我可以问一下在这种情况下谁是“我们”,我在哪里可以找到这份文件?
-
那么您是如何找到 Rcpp 的,您是如何设法不找到 例如它的小插曲的?
标签: c++ r c++11 rcpp r-package