R:C 符号名称不在加载表中 - 与外部 .c 文件链接时出错

2023-12-09

我正在尝试使用日晷用于求解常微分方程组 (ODE) 的包,使用SUNDIALS。首先,我尝试运行手册中的示例。

当 ODE 的右侧在 C 文件中描述时,Rsundials 可用于求解 ODE。

首先,ODE 在 C 文件中进行描述(包中的示例程序)

#include "include/nvector/nvector_serial.h"
#include "include/sundials/sundials_dense.h"
#define Ith(v,i) ( NV_DATA_S(v)[i - 1] )

int rhs(realtype t, N_Vector y, N_Vector ydot, void *f_data){
       realtype y1, y2, y3;
       y1 = Ith(y,1); y2 = Ith(y,2); y3 = Ith(y,3);
       /* Change values of ydot here using Ith(ydot,i) */

       double L = 49.3;
       double a21 = 0.011; double a12 = 0.012;
       double a31 = 0.0039; double a13 = 0.000035;
       double a01 = 0.021; double a02 = 0.016;
       Ith(ydot, 1) = -(a01 + a21 + a31)*y1 + a12*y2 + a13*y3 + L;
       Ith(ydot, 2) = a21*y1 - (a02 + a12)*y2;
       Ith(ydot, 3) = a31*y1 - a13*y3; 
       return(0);
}

保存在文件中test_rsundials.c。然后在终端中使用以下命令编译该文件

R CMD SHLIB ./test_rsundials.c

该文件编译时没有任何错误消息我看到test_rsundials.so and test_rsundials.o在我正在生成的目录中。

然后我用dyn.load加载包 -

dyn.load("/ .. path .. /test_rsundials.so")

上面的步骤中也没有错误消息,最后我使用以下命令调用cvode求解器(如包手册中所示)

library(Rsundials)
vals  <- cvodes(c(0.0,0.0,0.0), seq(0,400,20),"test_rsundials","rhs",rtol=1e-4,atol=c(1e-8,1e-14,1e-6),verbose=T)

这会产生错误 -

Error in .Call("cvodes", PACKAGE = "Rsundials", as.double(y), as.double(times),  : 
  "cvodes" not available for .Call() for package "Rsundials"

我也尝试了以下命令

yvals  <- .Call("cvodes",package="Rsundials",c(0.0,0.0,0.0), seq(0,400,20),"test_rsundials","rhs",rtol=1e-4,atol=c(1e-8,1e-14,1e-6),verbose=T)

这给了我错误

Error in .Call("cvodes", package = "Rsundials", c(0, 0, 0), seq(0, 400,  : 
  C symbol name "cvodes" not in load table

我不确定如何解决它,或者它意味着什么。我粘贴代码cvodes以下供参考

function (y, times, package, rhs, fndata = NULL, jacfunc = NULL, 
    rootfunc = NULL, numroots = 0, rtol = 1e-06, atol = 1e-06, 
    maxnumsteps = 500, maxstep = 0, verbose = FALSE, lasttime = FALSE) 
{
    if (!is.numeric(y)) 
        stop("Error: 'y' must be numeric")
    if (!is.numeric(times)) 
        stop("Error: 'times' must be numeric")
    if (!is.character(package)) 
        stop("Error: 'package' must be a character vector")
    if (!is.character(rhs)) 
        stop("Error: 'Right Hand Side function must be a character vector")
    if (!is.null(jacfunc) && !is.character(jacfunc)) 
        stop("Error: 'jacfunc' must be a character vector")
    if (!is.null(rootfunc) && !is.character(rootfunc)) 
        stop("Error: 'rootfunc' must be a character vector")
    if (!is.null(rootfunc) && numroots <= 0) 
        stop("Error: numroots must be greater than 0")
    if (!is.numeric(numroots)) 
        stop("Error: 'numroots' must be numeric")
    if (!is.numeric(rtol)) 
        stop("Error: 'rtol' must be numeric")
    if (!is.numeric(atol)) 
        stop("Error: 'atol' must be numeric")
    if (!is.numeric(maxstep)) 
        stop("Error: 'maxsteps' must be numeric")
    if (!is.null(fndata) && !is.numeric(fndata)) 
        stop("Error: Data arguments must be numeric")
    s = 1
    rhs = getNativeSymbolInfo(rhs, PACKAGE = package)$address
    jfunc = NULL
    if (!is.null(jacfunc)) 
        jfunc = getNativeSymbolInfo(jacfunc, PACKAGE = package)$address
    rofunc = NULL
    if (!is.null(rootfunc)) 
        rofunc = getNativeSymbolInfo(rootfunc, PACKAGE = package)$address
    solutions = .Call("cvodes", PACKAGE = "Rsundials", as.double(y), 
        as.double(times), rhs, as.double(fndata), jfunc, rofunc, 
        as.integer(numroots), as.integer(s), as.double(rtol), 
        as.double(atol), as.integer(maxnumsteps), as.integer(maxstep), 
        as.integer(verbose), as.integer(lasttime))
    if (lasttime == TRUE) 
        rows = 1
    else rows = length(times)
    solutions <- matrix(solutions, rows)
    col <- c()
    for (i in 1:length(y)) col[i] <- paste("y", i, sep = "")
    if (lasttime == TRUE) 
        dimnames(solutions) <- list(times[length(times)], col)
    else dimnames(solutions) <- list(times, col)
    solutions
}
<environment: namespace:Rsundials>

下面还粘贴了有关我的 R 的详细信息

> version
               _                           
platform       x86_64-apple-darwin13.1.0   
arch           x86_64                      
os             darwin13.1.0                
system         x86_64, darwin13.1.0        
status                                     
major          3                           
minor          1.0                         
year           2014                        
month          04                          
day            10                          
svn rev        65387                       
language       R                           
version.string R version 3.1.0 (2014-04-10)
nickname       Spring Dance     

我读到这可能是 64 位与 32 位编译问题,我不确定如何在 64 位标志中指定编译。我是 R 和 C 的新手,所以任何帮助将不胜感激!

发布更新——我读到此错误可能是由于链接库问题造成的。我看了看src这个包的文件夹下,有一个文件Makevars.old这意味着我可能需要链接到库

PKG_CFLAGS=-w

PKG_LIBS=-L. -lsundials_cvodes -lsundials_ida -lsundials_fida -lsundials_nvecserial

注意 - 软件包手册说“安装 SUNDIALS 不是该软件包的先决条件”。所以我把所有的文件都放进去了src该包的文件夹位于我的项目文件夹中(因此希望没有文件未找到错误)。

现在我尝试在终端中使用以下命令进行编译

export PKG_CFLAGS="-w"    
export PKG_LIBS="-L. -lsundials_cvodes -lsundials_nvecserial"
R CMD SHLIB test_rsundials.c sundials_dense.c nvector_serial.c 

我现在收到以下错误

clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include   -w -fPIC  -Wall -mtune=core2 -g -O2  -c nvector_serial.c -o nvector_serial.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o nvector_serial.so nvector_serial.o sundials_dense.o test_rsundials.o -L. -lsundials_cvodes -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: library not found for -lsundials_cvodes
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [nvector_serial.so] Error 1

虽然,我确实看到了三个新的.o files (test_rsundials.o, nvector_serial.o and sundials_dense.o)生成

任何帮助都感激不尽!!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:C 符号名称不在加载表中 - 与外部 .c 文件链接时出错 的相关文章

随机推荐

  • Bootstrap 3 中的字形图标未在 Firefox 上呈现

    我将 Bootstrap 3 用于 Web 应用程序 我的计算机 Chrome IE 和 Firefox 一切正常 但我的一位客户看不到字形图标 I first thought the problem was my css but the
  • 转换时区 pandas 数据框

    我有数据 Symbol bid ask Timestamp 2014 01 01 21 55 34 378000 EUR USD 1 37622 1 37693 2014 01 01 21 55 40 410000 EUR USD 1 37
  • GET 的表达参数长度限制

    我有一个 Nodejs 应用程序 我在其中使用 Express 来实现 REST API 其中一个 API 接受 SQL 查询 在数据库上运行它并返回 JSON 响应 一切都工作正常 直到我使用长 SQL 查询测试 api 在调试时 我注意
  • 如何在 GWT 中公开类功能

    我有一个用 Java 编写的类库 想将其转换为 Javascript 所有方法都非常简单 并且主要与操作集合有关 我有一个类 GameControl 我可以实例化它 并且我希望将其方法暴露给页面上的其他 Javascript 代码 我想到使
  • SERVER_ERROR:[代码] 1675030 [消息]:执行查询时出错

    我在 Android 中使用 Facebook 登录 Code callbackManager CallbackManager Factory create LoginButton loginButton LoginButton this
  • Windows IoT - Zebra 蓝牙打印机

    我有两台 Zebra 蓝牙打印机 MZ220 和 iMZ220 我 唯一 要做的事情就是在 Raspberry Pi 2 上使用 Windows IoT 系统打印文本 仅此而已 例子 1号线 Hello World Line2 Line3
  • NetBeans:JasperReport 异常

    我正在开发一个需要Jasper报告的项目 我使用下面提到的代码片段在NetBeans 6 1中查看报告 该报告最初是使用iReport 3 6 0生成和编译的 我的要求是使用打印此报告一个简单的 Swing 应用程序 代码片段 public
  • 在 android 中,在 recyclerView 中准确显示按钮所在位置的弹出窗口

    I m working on a gridLayout with recyclerView in android I ve a an option with each grid Item where I want to show my po
  • iOS 在另一个项目中使用现有项目的类/资源文件

    我在 App Store 中有一个 iPhone 应用程序的现有 xCode 项目 该项目包含许多视图控制器 视图 XIB 文件 图像 等 我希望创建另一个项目 其行为方式完全相同 包含相同的控制器 视图 图像 等 除了我希望更改一些小东西
  • 如果 JSF 不支持,为什么我能够将 绑定到任意方法?

    我正在使用 Glassfish 3 1 2 2 和 JSF Mojarra 2 1 6 我有以下 Facelets 页面
  • 为什么消息打印两次?

    我正在为 C 创建一个简单的 Tic Tac Toe 这是一个我遇到问题的特定函数 这应该让用户选择 X 或 O 并且对于大多数艺术来说它都有效 但是 如果我输入错误的符号 它会打印以下语句 无效符号 请重新输入 两次 Why and ho
  • 如何从网页上使用关联程序打开本地文件?

    我知道我的应用程序的用户有一个名为 c sourcefile cs 的本地文件 我需要找到一种方法来呈现该文件的链接 以便当他单击该链接时 它将在 Visual Studio 中打开该文件 这是供我们开发团队内部使用的 因此如果没有标准方法
  • 复制省略可见副作用

    考虑这段代码 include
  • 将图像存储到 sqlite 数据库中

    下面是我在 sqlite 数据库中存储图像的代码 当我用它来存储值时它可以工作 现在我尝试将图像存储在 sqlite 数据库中 我不知道我做错了什么 我已经搜索过 但无法得到我需要的答案 任何人都可以帮我解决他的代码 sqlite3 dat
  • UITableView 静态单元格作为子视图?

    使用 iOS 5 中的 Storyboard 我将 uitableview 添加到具有静态单元格的现有视图控制器中 但是当我运行该应用程序时 表格视图不会显示 视图上的其他所有内容都加载良好 如何在常规视图控制器上将带有静态单元格的 uit
  • 如何根据每个项目中显示的数据更改列表项目的背景颜色?

    我在 SQLite 中有一个订单列表 其状态各不相同 已分配 已加载 已交付 我希望每个订单在列表中显示时都有不同的颜色背景 到目前为止 我还没有找到一个好的方法来做到这一点 我发现了很多关于如何根据位置更改列表项的背景颜色的讨论 但没有一
  • 为什么 np.hypot 和 np.subtract.outer 与普通广播相比非常快,并且有更快的方法来计算距离矩阵吗?

    我有两大组二维点 需要计算距离矩阵 我需要它很快 所以我使用了 NumPy 广播 在计算距离矩阵的两种方法中 我不明白为什么一种方法比另一种方法更好 From here我得到了矛盾的结果 单元格 3 4 6 和 8 9 都计算距离矩阵 但
  • Java:在 Scanner.nextLine() 上使用默认值填充 Scanner;

    我正在编写一个运行循环并不断询问用户输入的java程序 然后程序用该字符串执行一系列操作 并请求另一个字符串并重复 问题是许多字符串非常相似 所以我想用循环中上次的输入填充提示 例如 如果用户输入如下值 Enter the SKU Numb
  • Prolog - 将数字合并为数字

    我想将数字列表合并为数字 1 2 3 gt 123 我的谓词 merge X X merge H T X merge T X1 X is X1 H 10 但现在我得到 1 2 3 gt 33 另一种方法是将到目前为止已处理的内容乘以十 但您
  • R:C 符号名称不在加载表中 - 与外部 .c 文件链接时出错

    我正在尝试使用日晷用于求解常微分方程组 ODE 的包 使用SUNDIALS 首先 我尝试运行手册中的示例 当 ODE 的右侧在 C 文件中描述时 Rsundials 可用于求解 ODE 首先 ODE 在 C 文件中进行描述 包中的示例程序