编译 Rpackage 的问题:使用 Rcpp 在 asNamespace(ns) 中出错
Issues compiling Rpackage: error in asNamespace(ns) using Rcpp
正在开发一个小型 Rcpp 程序包以使用 Boost
及其在 C 中的一些几何函数。
函数编写完成,一切正常。在推到 GitHub 之前最后一次测试一切正常(Clean and Rebuild
并测试功能)。一旦我仔细检查目录是否全部干净地存储在 GitHub 中,我就从我的本地机器上删除了该目录。还应该注意的是,我在这上面有 Roxygen2 运行 并管理着 NAMESPACE
文件。
克隆目录后 Clean and Rebuild
我收到以下错误:
==> Rcpp::compileAttributes()
* Updated R/RcppExports.R
==> R CMD INSTALL --preclean --no-multiarch --with-keep.source MinimumRcpp
* installing to library ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library’
* installing *source* package ‘MinimumRcpp’ ...
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RcppExports.cpp -o RcppExports.o
** libs
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c findParetoSet.cpp -o findParetoSet.o
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c kintersection.cpp -o kintersection.o
clang++ -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o MinimumRcpp.so RcppExports.o findParetoSet.o kintersection.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp/libs
** R
** byte-compile and prepare package for lazy loading
Error in asNamespace(ns) : not a namespace
Error : unable to load R code in package ‘MinimumRcpp’
ERROR: lazy loading failed for package ‘MinimumRcpp’
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp’
Exited with status 1.
当然,代码没有任何变化。但是,我确实有以下 .gitignore
个文件:
# /.gitignore
inst/lib
.Rproj.user ## Could this be an issue?
.Rproj.user/ ## Could this be an issue?
.Rproj.user/** ## Could this be an issue?
src/*.o
src/*.so
src/*.dll
src/symbols.rds
.Rhistory
.RData
.DS_Store
## QtCreator
Rcpp.pro
Rcpp.pro.user
*.autosave
.#*
*.tar.gz
vignettes/*_cache
## GNU global
GPATH
GRTAGS
GTAGS
##
local/
## docker helpers
docker/*sh
docker/*/*.sh
# /.Rbuildignore
debian
inst/doc/html
inst/doc/latex
inst/doc/man
inst/doc/jss.bst
vignettes/jss.bst
^.*\.Rproj$
^\.Rproj\.user$
vignettes/notyet
doxyfile
\.travis\.yml
\.dir-locals\.el
\.clang_format
vignettes/getCurrentVersionsOfCitedPackages.R
^Contributing.md$
^\.codecov\.yml$
inst/include/Rcpp.h.new
inst/include/Rcpp.h.old
LICENSE
.*\.tar\.gz$
\.editorconfig
docker
^GPATH
^GRTAGS
^GTAGS
^local
vignettes/Makefile
vignettes/rmd
\.github
是否有可能遗留了一些构建包所必需的包数据并导致了当前的问题?
如有任何帮助,我们将不胜感激。此外,任何关于如何调试它的建议都会有所帮助,因为当前的输出消息非常模糊并且让我无方向感。
这里是 GitHub 重现性的回购协议:https://github.com/eduardoRubioG/MinimumRcpp
菜鸟错误,但很严重:
从不 曾经 将脚本文件保存在您的 R/
目录中
目录中的所有内容(我们的意思是 所有内容)都已获取来源(前提是它看起来像 R 代码,_即以 [=11= 结尾) ])
你在其中留下了一个带有 library(MinimumRcpp)
调用的脚本,所以现在你的包字节码编译想要自己获取源代码 --> 这不是一个好的计划
简而言之,保留此类脚本,但将它们放在 中,例如 local/
,并通过 .Rbuildignore
排除 local/
。
还有一堂重要的风格课
- 不要在代码中留下
rm(list = ls(all = TRUE))
因此,如果您 mv R/script.R R/script.R.txt
并重建,一切都很好。
(我收到了六个警告,因为 n
不是 size_t
,而是与一个相比。你可能想早点施放它。)
正在开发一个小型 Rcpp 程序包以使用 Boost
及其在 C 中的一些几何函数。
函数编写完成,一切正常。在推到 GitHub 之前最后一次测试一切正常(Clean and Rebuild
并测试功能)。一旦我仔细检查目录是否全部干净地存储在 GitHub 中,我就从我的本地机器上删除了该目录。还应该注意的是,我在这上面有 Roxygen2 运行 并管理着 NAMESPACE
文件。
克隆目录后 Clean and Rebuild
我收到以下错误:
==> Rcpp::compileAttributes()
* Updated R/RcppExports.R
==> R CMD INSTALL --preclean --no-multiarch --with-keep.source MinimumRcpp
* installing to library ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library’
* installing *source* package ‘MinimumRcpp’ ...
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c RcppExports.cpp -o RcppExports.o
** libs
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c findParetoSet.cpp -o findParetoSet.o
clang++ -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.5/Resources/library/Rcpp/include" -I/usr/local/include -fPIC -Wall -g -O2 -c kintersection.cpp -o kintersection.o
clang++ -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o MinimumRcpp.so RcppExports.o findParetoSet.o kintersection.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp/libs
** R
** byte-compile and prepare package for lazy loading
Error in asNamespace(ns) : not a namespace
Error : unable to load R code in package ‘MinimumRcpp’
ERROR: lazy loading failed for package ‘MinimumRcpp’
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/MinimumRcpp’
Exited with status 1.
当然,代码没有任何变化。但是,我确实有以下 .gitignore
个文件:
# /.gitignore
inst/lib
.Rproj.user ## Could this be an issue?
.Rproj.user/ ## Could this be an issue?
.Rproj.user/** ## Could this be an issue?
src/*.o
src/*.so
src/*.dll
src/symbols.rds
.Rhistory
.RData
.DS_Store
## QtCreator
Rcpp.pro
Rcpp.pro.user
*.autosave
.#*
*.tar.gz
vignettes/*_cache
## GNU global
GPATH
GRTAGS
GTAGS
##
local/
## docker helpers
docker/*sh
docker/*/*.sh
# /.Rbuildignore
debian
inst/doc/html
inst/doc/latex
inst/doc/man
inst/doc/jss.bst
vignettes/jss.bst
^.*\.Rproj$
^\.Rproj\.user$
vignettes/notyet
doxyfile
\.travis\.yml
\.dir-locals\.el
\.clang_format
vignettes/getCurrentVersionsOfCitedPackages.R
^Contributing.md$
^\.codecov\.yml$
inst/include/Rcpp.h.new
inst/include/Rcpp.h.old
LICENSE
.*\.tar\.gz$
\.editorconfig
docker
^GPATH
^GRTAGS
^GTAGS
^local
vignettes/Makefile
vignettes/rmd
\.github
是否有可能遗留了一些构建包所必需的包数据并导致了当前的问题?
如有任何帮助,我们将不胜感激。此外,任何关于如何调试它的建议都会有所帮助,因为当前的输出消息非常模糊并且让我无方向感。
这里是 GitHub 重现性的回购协议:https://github.com/eduardoRubioG/MinimumRcpp
菜鸟错误,但很严重:
从不 曾经 将脚本文件保存在您的
R/
目录中目录中的所有内容(我们的意思是 所有内容)都已获取来源(前提是它看起来像 R 代码,_即以 [=11= 结尾) ])
你在其中留下了一个带有
library(MinimumRcpp)
调用的脚本,所以现在你的包字节码编译想要自己获取源代码 --> 这不是一个好的计划简而言之,保留此类脚本,但将它们放在 中,例如
local/
,并通过.Rbuildignore
排除local/
。
还有一堂重要的风格课
- 不要在代码中留下
rm(list = ls(all = TRUE))
因此,如果您 mv R/script.R R/script.R.txt
并重建,一切都很好。
(我收到了六个警告,因为 n
不是 size_t
,而是与一个相比。你可能想早点施放它。)