c++ - 在 R 项目中包含第 3 方库

标签 c++ r static-libraries rstudio rcpp

我正在尝试将 qpOASES c++ 库包含在我在 RStudio 中构建的 Rcpp 项目中。

我浏览了编写 R 包和各种 Rcpp 小插图。我找到了这个 post其中引用 this存档对话。按照我的指导,我将 qpOASES 库编译成静态(libqpOASES.a 和 libqpOASES.so)库。我跟着这个youtube video关于如何在 RStudio 中使用外部库。该视频指示我在我的 R 项目中创建 lib 和 inc 文件夹。在 lib 文件夹中,有两个静态库文件(libqpOASES.a 和 libqpOASES.so)。在 inc 文件夹中,我放置了 libqpOASES.hpp 和一个包含 libqpOASES.hpp 引用的其他头文件的目录 qpOASES。

我在 windows 电脑上工作,但我创建的包最终也需要在 unix 上工作。目前在我的 MakeVars(和 Makevars.win)文件中,我有以下内容:

PKG_CPPFLAGS = -I../inc
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -L../lib  -llibqpOASES

当我清理并重建项目时:它会成功构建,直到出现以下情况:

g++ -m64 -shared -s -static-libgcc -o default.dll tmp.def LS_LocalLaplacian.o RcppExports.o    RegularizedLeastSquares.o TrainNetworks.o affinityMatrix.o dist2.o dn.o dominateSet.o rcpparma_hello_world.o -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lRlapack -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lRblas -lgfortran -L../lib -llibqpOASES -Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 -Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lR
c:/rbuildtools/3.1/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -llibqpOASES
collect2: ld returned 1 exit status no DLL was created
ERROR: compilation failed for package 'default'

我已经检查了事物的命名是否有拼写错误等,但没有发现那里的问题。我尝试从 PKG_LIBS 声明中删除“-llibqpOASES”,它编译;但是,当我尝试使用 qpOASES 库提供的方法时,找不到它们:

undefined reference to qpOASES::QProblem::QProblem(int, int, qpOASES::HessianType)'
RegularizedLeastSquares.o:RegularizedLeastSquares.cpp:(.text+0x2a8): undefined reference to
qpOASES::QProblem::~QProblem()'
collect2: ld returned 1 exit status
no DLL was created
ERROR: compilation failed for package 'default'

如何在 RStudio 中成功使用外部 C++ 库?

最佳答案

有很多现有的包可以做到这一点——我会选择其中一个,看看它是如何工作的。

一个相对较新的例子是 nloptr绑定(bind)到 NLopt .我帮助使构建的 Unix 端更加灵活(即,如果存在库,则使用该库,否则下载并构建它——在它总是做后者之前)。您也可以将其用作独立的测试用例进行比较。

关于c++ - 在 R 项目中包含第 3 方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165327/

相关文章:

c++ - GTK 3.x 是真正的跨平台解决方案吗?

r - R中下上限的快速索引

objective-c - 为 iOS 创建静态库值得吗?

c++ - 未定义对 `inflate' 的引用

c++ - 不明确的符号错误?

c++ - 找到另一个 map 内 vector 的公共(public)元素

r - 使用 data.table 时没有匹配的 %in%

c++ - 来自第 3 方静态库的回调中未捕获的异常

c++ - FFmpeg av_read_frame 从音频流返回数据包

html - Shiny 的 R : Alert message or modal dialog input:invalid