r - 如何在 R 包命名空间文件中正确使用 useDynLib()

标签 r namespaces makefile package shared-libraries

尽管互联网上存在一些解决方案,但我发现没有一个适合我目前面临的问题(尽管也许我太愚蠢了):

我正在尝试构建一个 R 包,它广泛使用了由 Makefile 编译的共享对象(是的,不好的做法,我知道,但是不能告诉 Makevars 文件将 C 和 Fortran 代码编译成一个共享对象) 来自包 src 中的代码目录。无论我在哪里编译 .so(我尝试了 srclibs 和包基本文件夹)或我如何命名它(作为上述解决方案之一,它必须像它包含的包一样命名) , R CMD check退出

** testing if installed package can be loaded
Error in library.dynam(lib, package, package.lib) : 
shared object ‘SoMNibEN.R.so’ not found

由于 useDynLib(SoMNibEN.R)我的 NAMESPACE 文件中的指令(其中 SoMNibEN.R 是我的包的名称,但它也不适用于原始名称)

我的假设是我要么使用那个 useDynLib()命令错误或者我的 Makefile 有问题(尽管编译工作得很好并且共享对象是在我的项目文件夹中创建的 - 我只是不知道它是否成功复制到包安装目录)。

所以,如果有人知道我在这里可能做错了什么,请告诉我!

最佳答案

您需要包的名称作为参数,因为这是由 R 构建的共享对象的名称,例如 useDynLib("chron") .引号是可选的(因为它们用于 library() 等)。

我还建议不要使用 Makefile,而只是将 C 和 Fortran 文件放在 src/ 中。目录。 R 通常足够聪明,知道该做什么。如果您需要 -I等开关,你可以在那里设置它们。

最后,使用 CRAN。有数百个带有编译源的包,其中一些在结构上肯定与您的问题相似。

关于r - 如何在 R 包命名空间文件中正确使用 useDynLib(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976036/

相关文章:

r - 统计 : binomial distribution and simple graph in R

r papaja::printnum(0L, numerals =F) 返回空值,而不是 "zero"

r - 当我在导入 ggplot2 的包中使用 ggplotGrob 函数时,找不到它

c++ - G++编译,mac os和ubuntu的区别

从多个文件中随机提取视频帧

r - 使用 lpsolve 在 R 中进行线性规划

.net - 命名空间未通过 DataContractSerializer 从 XML 根中删除

typescript - 在自定义定义中引用全局声明的命名空间类型

c - 在 makefile 中找不到隐式规则

linux - 如何从源代码安装内核模块。制作过程中出错