【问题标题】:Ubuntu ld can not find lRcppUbuntu ld 找不到 lRcpp
【发布时间】:2017-03-26 02:49:41
【问题描述】:

我通过r-cran-rcpp 安装了Rcpp,然后我使用dpkg -L r-cran-rcpp 找出来

ls /usr/lib/R/site-library/Rcpp/libs/
Rcpp.so

但是当我使用ld -L /usr/lib/R/site-library/Rcpp/libs -l Rcpp ld 时抱怨它找不到 Rcpp,知道发生了什么吗?

事实上,我正在使用无缝 R 和 C++ 的第一个示例 与 Rcpp 集成,但以下代码抱怨找不到 lrcpp

首先是fib.cpp中的cpp代码

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int fibonacci(const int x) {

if (x == 0) return(0);

 if (x == 1) return(1);

return (fibonacci(x - 1)) + fibonacci(x - 2);

 }

extern "C" SEXP fibWrapper(SEXP xs) {

int x = Rcpp::as<int>(xs);

 int fib = fibonacci(x);

return (Rcpp::wrap(fib));

 }

~然后我尝试编译它们

 PKG_CXXFLAGS="-I/home/sunxd/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/include" \
 PKG_LIBS="-L/home/sunxd/R/x86_64-pc-linux-gnu-library/3.3/Rcpp/libs -lRcpp" \
R CMD SHLIB fib.cpp

PKG_CXXFLAGS="-I/usr/lib/R/site-library/Rcpp/include" \
 PKG_LIBS="-L/usr/lib/R/site-library/Rcpp/libs -lRcpp" \
R CMD SHLIB fib.cpp

【问题讨论】:

  • please please至少尝试阅读一些文档和现有示例。我字面上写了一本关于它的书,有一个充满演示文稿的网站,并在这里回答了数百个问题。简而言之:你的假设是错误的。
  • 嗨,Dirk,实际上我正在阅读您的书并尝试解决 fibnacci.cpp 示例,但它找不到 rcpp,请参阅更新
  • 工作中的例子都有效。根据您的(有些不完整)两个问题,我猜测您正在尝试编译可执行文件。 Rcpp 是一个用于从 R 调用的扩展。
  • 打开verbose,您可以研究每个工作版本,看看它们有何不同。
  • 好的,更新有帮助。现在我们至少可以尝试阅读您尝试过的内容。

标签: ubuntu ld rcpp


【解决方案1】:

好的,现在我们有了一个可重复的完整问题,我们可以解决这个问题:

  1. OP 试图从我 2013 年的书中复制一个介绍性示例
  2. 当这本书出版时,我们仍然链接反对 Rcpp。
  3. 不久之后,情况发生了变化,我们现在使用结合仅标题加上在加载时实例化(而不是链接)的东西
  4. 因此链接步骤是多余的。
  5. 如果您将示例更新为空(或未设置)PKG_LIBS,那么一切都很好:

完整示例:

/tmp$ cat fibonacci.cpp 

#include <Rcpp.h>

int fibonacci(const int x) {
   if (x == 0) return(0);
   if (x == 1) return(1);
   return (fibonacci(x - 1)) + fibonacci(x - 2);
}

extern "C" SEXP fibWrapper(SEXP xs) {
   int x = Rcpp::as<int>(xs);
   int fib = fibonacci(x);
   return (Rcpp::wrap(fib));
}
/tmp$ cat rcpp.sh
#!/bin/sh
PKG_CXXFLAGS="-I/usr/local/lib/R/site-library/Rcpp/include" \
PKG_LIBS="" \
R CMD SHLIB fibonacci.cpp
/tmp$ ./rcpp.sh 
g++ -I/usr/share/R/include -DNDEBUG     -I/usr/local/lib/R/site-library/Rcpp/include -fpic  -g -O3 -Wall -pipe -Wno-unused -pedantic -c fibonacci.cpp -o fibonacci.o
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o fibonacci.so fibonacci.o -L/usr/lib/R/lib -lR
/tmp$ 

您现在可以加载fibonacci.so

这些天来,Rcpp 属性好多了。看它的小插曲。

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2020-11-04
    • 2012-12-13
    • 1970-01-01
    • 2018-10-01
    • 2021-05-07
    相关资源
    最近更新 更多