使用外部 C 库在 Rcpp 中编译 C++
Compiling C++ in Rcpp with external C library
我正在尝试使用使用外部库的 Rcpp
代码构建 R 包。我之前曾问过关于如何在包 中使用外部 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
如果您需要查看整个包代码,它可用 here
特定 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
这是一个 link 错误,而不是编译错误。编译成功让您进入 link 步骤。但是
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 无法构建共享库,因为您没有 link 提供它的目标代码(我想是来自日晷)。
我正在尝试使用使用外部库的 Rcpp
代码构建 R 包。我之前曾问过关于如何在包
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
如果您需要查看整个包代码,它可用 here
特定 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
这是一个 link 错误,而不是编译错误。编译成功让您进入 link 步骤。但是
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 无法构建共享库,因为您没有 link 提供它的目标代码(我想是来自日晷)。