2016-11-11 11 views
0

Я установил Rcpp через r-cran-rcpp и я использую dpkg -L r-cran-rcpp, чтобы узнать, чтоUbuntu л.д. не может найти lRcpp

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

Но когда я использую ld -L /usr/lib/R/site-library/Rcpp/libs -l Rcpp л.д. complaines, что он не мог найти Rcpp, ни малейшего представления, что случилось?

На самом деле, я работаю с первым примером бесшовным R и C++ Интеграция с Rcpp, но следующий код пожаловаться не может найти lrcpp

первый код CPP в fib.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 
+1

Пожалуйста, пожалуйста _please_ ** пожалуйста ** по крайней мере, попробуйте прочитать некоторые документы и существующие примеры. Я буквально написал об этом книгу, у вас есть сайт, полный презентации, и ответил на здесь сотни вопросов. И вкратце: ваши предположения ошибочны. –

+0

Привет, Dirk, на самом деле я читаю вашу книгу и пытаюсь выработать пример fibnacci.cpp, но он compain не может найти rcpp, см. Обновления. – sunxd

+0

Примеры в работе все работают. Из ваших (несколько неполных) двух вопросов, с которыми я согласен, вы пытаетесь скомпилировать исполняемый файл. Rcpp является для расширений, вызванных из R. –

ответ

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: Значительно лучше. Смотрите его виньетку.

+0

Да, теперь это работает, так было создано! – sunxd