最近几天我一直在使用很多RcppArmadillo。我一直致力于3D阵列卷积项目。在最初的陡峭学习曲线之后,我设法使用Armadillo创建了一些有用的C ++例程。感谢Dirk。
然后突然RcppArmadillo开始做奇怪的事情;我一直收到这条消息:
Found no calls to: 'R_registerRoutines', 'R_useDynamicSymbols'
It is good practice to register native routines and to disable symbol
search.
在Windows 10中会发生这种情况。在Linux中,您可能会收到相同的消息,但可以使用RcppArmadillo::RcppArmadillo.package.skeleton()
或Writing R Extensions - 5.4 Registering native routines
中的新说明快速修复此消息。但是在Windows中这将不起作用。为什么呢?
为了解决问题,我开始使用带有新R(3.4.1)的虚拟机(VM)。当您开始使用RcppArmadillo构建的演示时,它将构建演示而不会出现打嗝,没有注释,没有警告消息。一旦安装devtools
,RcppArmadillo的问题就开始了。
要重现这一点,您可以执行以下操作:(1)
从一个全新的R开始,并安装仅运行所需的软件包以使用RcppArmadillo(一对)构建 your-package 。 (2)
构建您的演示包。你不会得到任何错误。 (3)
下载我测试的任何这些软件包的来源:gckrig,GAS,abcrf,AbsFilterGSEA,Amelia,MAVE,SparseFactorAnalysis,RcppProgress,artfima,geospt。他们都使用RcppArmadillo。他们应该建立好,只要你给他们提供依赖。 (4)
现在,安装devtools
。在您开始收到消息后立即:
Found no calls to: 'R_registerRoutines', 'R_useDynamicSymbols'
It is good practice to register native routines and to disable symbol
search
无论我做了什么,我都无法摆脱这个音符。我在Linux中尝试了相同的软件包,完全没有问题。这会导致延迟,因为无法使用该消息向CRAN提交包。
(5)
现在,如果您卸载devtools
和依赖项并再次尝试构建任何RcppArmadillo软件包;没有更多消息注册本机例程。美丽。
我想知道为什么devtools
导致了这种冲突。我们怎样才能解决这个问题?我喜欢devtools
,但如果我必须与RcppArmadillo合作,必须将其卸载。艰难的选择。
修改
这是完全可重复的。以下是重现行为的步骤:
(1)
从一个新的R开始,并使用RcppArmadillo(一对)安装构建你的软件包所需的软件包。不要安装devtools
。
(2)
构建您的演示包。您将不会收到注册本机例程错误。
(3)下载我测试的任何这些软件包的来源:gckrig
,GAS
,abcrf
,AbsFilterGSEA
,Amelia
,{ {1}},MAVE
,SparseFactorAnalysis
,RcppProgress
,artfima
。他们都使用RcppArmadillo。他们应该建立好,只要你给他们提供依赖。
(4)现在,安装geospt
。尝试使用上面的任何包重新构建。在您开始收到消息后立即:注册本机例程。
(5)现在,如果您卸载devtools
和依赖项并再次尝试构建任何RcppArmadillo软件包;没有更多与注册本机例程相关的消息。
修改
这已经过测试,有三个Windows 10虚拟机实例从头开始安装R 3.4.1,Rtools。在所有测试中,使用RcppArmadillo构建包,并显示消息注册本机例程。如果你尝试在Linux中构建 - 相同的包 - 它将通过没有注释。