Я пытаюсь собрать пакет R с Rcpp
код, который использует внешнюю библиотеку. Ранее я спрашивал SO о том, как использовать внешнюю библиотеку C в пакете Вот. Проблема, с которой я сталкиваюсь, состоит в том, как только я включаю следующую строку кода
y = N_VNew_Serial(3);
Я получаю ошибку
sundials_test.o:sundials_test.cpp:(.text+0x2ba): undefined reference to `N_VNew_Serial'
collect2: ld returned 1 exit status
Error in Rcpp::sourceCpp("src/sundials_test.cpp") :
Error occurred building shared library
Я не получаю ошибку с линией
N_Vector y = NULL;
Итак, я думаю, что подключение к библиотеке работает нормально. Я также подтвердил, что объявление функции для N_VNewSerial()
находится в nvector/nvector_serial.h
Если вам нужно посмотреть весь код пакета, он доступен Вот
Код для конкретного Rcpp
файл вставлен ниже
#include <Rcpp.h>
// #include <iostream.h>
#include <cvode/cvode.h> /* prototypes for CVODE fcts., consts. */
#include <nvector/nvector_serial.h> /* serial N_Vector types, fcts., macros */
#include <cvode/cvode_dense.h> /* prototype for CVDense */
#include <sundials/sundials_dense.h> /* definitions DlsMat DENSE_ELEM */
#include <sundials/sundials_types.h> /* definition of type realtype */
using namespace Rcpp;
void InitialConditions (NumericVector x){
N_Vector y = NULL;
// y = N_VNew_Serial(3);
//
// NV_Ith_S(y,0) = 1;
// NV_Ith_S(y,1) = 2;
// NV_Ith_S(y,2) = 3;}
Я не уверен, почему код сообщает undefined reference
к одной функции, но не к другой в том же заголовочном файле, и любая помощь в понимании решения этой ошибки будет принята с благодарностью.
Спасибо!
SN248
Это ссылка на сайт ошибка, а не ошибка компиляции. Компиляция прошла успешно, что позволило вам перейти к шагу ссылки. Но
sundials_test.o:sundials_test.cpp:(.text+0x2ba): \
undefined reference to `N_VNew_Serial'
collect2: ld returned 1 exit status
Error in Rcpp::sourceCpp("src/sundials_test.cpp") :
Error occurred building shared library
очень ясно: R не может построить общую библиотеку, потому что вы не сделали ссылка на сайт против объектного кода (от Sundials, я полагаю), который его предоставляет.
Других решений пока нет …