DSt*_*ens 12 namespaces makefile r shared-libraries package
虽然互联网上存在一些解决方案,但我发现这些解决方案都不适合我面临的问题(尽管我可能只是太愚蠢了):
我正在尝试构建一个R包,它广泛使用由Makefile编译的共享对象(是的,糟糕的做法,我知道,但是不能告诉Makevars文件将C和Fortran代码编译成一个共享对象)从包的src
目录中的代码.无论我在哪里编译.so(我尝试过src
,libs
并且打包基本文件夹)或者我如何命名它(作为上面提到的解决方案之一,它必须像它包含的包一样命名),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
Run Code Online (Sandbox Code Playgroud)
由于useDynLib(SoMNibEN.R)
我的NAMESPACE文件中的指令(SoMNibEN.R
我的包名称在哪里,但它也不能与原始名称一起使用)
我的假设是我要么使用该useDynLib()
命令错误,要么我的Makefile出错了(尽管编译工作得很好,共享对象是在我的项目文件夹中创建的 - 我只是不知道它是否被复制到包安装目录成功).
所以,如果有人知道我在这里做错了什么,请告诉我!
您希望包的名称作为参数,因为这是R构建的共享对象的名称,例如useDynLib("chron")
.引号是可选的(因为它们library()
等).
我还建议不要使用Makefile,只需将C和Fortran文件放在src/
目录中即可.R通常很聪明,知道该怎么做.如果你需要-I
等开关,你可以在那里设置它们.
最后,使用CRAN.有数百个包含编译源的包,有些包的结构与您的问题类似.