Компиляция C++ в Rcpp с внешней библиотекой C

Я пытаюсь собрать пакет 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

1 ответ

Это ошибка ссылки, а не ошибка компиляции. Компиляция прошла успешно, что позволило вам перейти к шагу ссылки. Но

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), который его предоставляет.

Другие вопросы по тегам