2014-02-11 49 views
0

我正在編寫一個R程序包,我需要在R通過庫(myPackage)中加載程序包時包含已編譯的庫文件qserver.dll和dym.load。這個qserver.dll由第三方供應商提供,所以我沒有源代碼。如何在R程序包中加載編譯庫

我在互聯網上做了一些研究,但信息很少。到目前爲止我發現的是,我應該把這個文件放在我的包文件夾的inst /子目錄中。但是,我怎麼能確定該文件的路徑寫包的時候,所以我可以寫包的時候喜歡寫東西

dyn.load("path/to/file/qserver.dll") 

。非常感謝。

+0

如果您最終將'qserver'製作成R包格式,您會介意分享嗎?我實際上正在考慮將它自己轉換成一個包。 –

回答

2

項目在inst目錄包都是通過

system.file(..., package=<mypkg>) 

提供這樣假設你有這樣的.dll在包路徑<pkg>/inst/lib/qserver.dll,你可以做

system.file("lib/qserver.dll", package=<mypkg>) 

獲取文件位置。

現在,當然,這不是CRAN可接受的,而CRAN Repository Policy在這方面很清楚。所以如果你真的需要qserver.dll,你需要找到源代碼,或者考慮一個不同的發佈路線。

+0

其實源代碼在[code.kx.com repo,例如(http://code.kx.com/wsvn/code/cookbook_code/r/w64_qserver/),即文件'base.c'和'c.o'。說明如何從提供的源代碼構建'qserver.dll'在'README.txt'中。不知道這是否會按原樣工作,還沒有測試過。 –

+0

在將任何內容發佈到CRAN之前,還會檢查'qserver'實用程序的許可,因爲kdb是專有數據庫。 –