gpt4 book ai didi

c++ - 如何将 OpenBlas Lapacke 与 Rcpp 一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:02 25 4
gpt4 key购买 nike

我有一些使用 Lapacke 的运行 C++ 代码OpenBlas 附带的版本.我想将此代码包含到 R 包中,并使用 Rcpp 在该函数和 R 之间传输数据包裹。但不知何故,两人似乎并不喜欢对方。只要我有 #include <lapacke.h>#include <Rcpp.h>在一个源文件中,它不再编译。两者都可以单独工作。据我所知,有一大堆错误消息是 Rcpp坏了(例如 /home/Alex/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include/Rcpp/traits/traits.h:32:15: error: expected ‘)’ before ‘__extension__’)

我不知道为什么会这样。有没有办法同时使用两者?还是我应该做一些完全不同的事情?

这是一个给我错误的最小示例:

  1. 我使用

    创建了一个包
    Rcpp::Rcpp.package.skeleton("LT", example_code = FALSE)
  2. 我添加了一个 .cpp归档到/src

    #include <lapacke.h>
    #include <Rcpp.h>

    int test_LAPACK(){
    return(1);
    }
  3. 我添加了一个 Makvars 文件到 /src

    PKG_CXXFLAGS = -I/opt/OpenBLAS/include
    PKG_LIBS = -L/opt/OpenBLAS/lib -lopenblas -lpthread -lgfortran
    CXX_STD = CXX11
  4. 编译安装

    Rcpp::compileAttributes("LT")
    devtools::install("LT")

最佳答案

它实际上按照标准 sudo apt install liblapacke-dev 在我的系统上运行 前提是我还更改了包含顺序

证人:

来源

rob:/tmp/lapacke/LT$ cat src/lt.cpp 
#include <Rcpp.h>
#include <lapacke.h>

int test_LAPACK(){
return(1);
}
rob:/tmp/lapacke/LT$ ls src/ ## no Makevars needed
lt.cpp
rob:/tmp/lapacke/LT$

构建

rob:/tmp/lapacke/LT$ build.r 
* checking for file ‘./DESCRIPTION’ ... OK
* preparing ‘LT’:
* checking DESCRIPTION meta-information ... OK
* cleaning src
* installing the package to process help pages
* saving partial Rd database
* cleaning src
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
Removed empty directory ‘LT/R’
* building ‘LT_1.0.tar.gz’

rob:/tmp/lapacke/LT$

安装

rob:/tmp/lapacke/LT$ install.r LT_1.0.tar.gz 
* installing *source* package ‘LT’ ...
** libs
ccache g++ -I"/usr/share/R/include" -DNDEBUG -I"/usr/local/lib/R/site-library/Rcpp/include" -fpic -g -O3 -Wall -pipe -march=native -c lt.cpp -o lt.o
ccache g++ -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o LT.so lt.o -L/usr/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/LT/libs
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (LT)
rob:/tmp/lapacke/LT$

运行

(在我添加一行 //[[Rcpp::export]] 后,运行 compileAtttributes() 并重建并安装。)

rob:/tmp/lapacke/LT$ r -lLT -p -e'test_LAPACK()'
[1] 1
rob:/tmp/lapacke/LT$

总结

检查你的编译器。没有根本原因这不应该起作用,它在这里起作用(Ubuntu 18.04)。

关于c++ - 如何将 OpenBlas Lapacke 与 Rcpp 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53241120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com