使用 Rcpp 将目标文件链接到函数的简化示例[重复]

2024-03-24

我现有的 C 代码由三个文件组成:头文件(“.h”文件)、库文件(“.o”文件)和源文件。它们目前在 UNIX 下运行,并在 Matlab 中编译为“mex 文件”。我想使用 Rcpp 将它们移植到 R。它们都又长又复杂,所以我做了一个最小的例子来帮助我理解如何将它们移植到 R。

简化的头文件(my_header.h)是:

typedef unsigned int    ui4;
ui4  add_one( ui4 );

简化的“库”文件(my_lib.cpp)是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "my_header.h"

ui4 add_one(ui4 x) {
        return(x+1);
}

简化后的功能程序(my_program.cpp)为:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <Rcpp.h>
#include <cmath>

#include "my_header.h"

using namespace Rcpp;

// [[Rcpp::export]]
ui4 my_program_r () {
//int main (int argc, const char * argv[]) {
//
// As a MATLAB mex file, this function calls "main(..."
//
  ui4 value = add_one( (ui4)1 );
  printf( "%d", value );
  return value;
}

从终端(我在 Mac 上),我可以编译它们而不会出现错误:

$ g++ my_lib.cpp -c -o my_lib.o
$ g++ my_program.cpp -o my_program my_lib.o

当我尝试在 RStudio 中编译它们时,我得到:

> library(Rcpp)
> sourceCpp( "my_program.cpp" )
Warning message:
In sourceCpp("my_program.cpp") :
  No Rcpp::export attributes or RCPP_MODULE declarations found in source
> 

为什么这个不能在 Rcpp 下编译?如何在“sourceCpp”命令中指定链接文件(“.o”库文件)?需要指定头文件吗?


The sourceCpp命令仅适用于单个文件。如果有多个文件,则必须使用包:

  • Call Rcpp::Rcpp.package.skeleton(...)创建一个框架包。
  • Copy *.h, *.c and *.cpp to the src folder.
  • Call Rcpp::compileAtrributes().
  • Use R CMD build ..., R CMD check ... and R CMD INSTALL ...构建、检查和编译包。 (这check会抱怨未记录的功能...)

欲了解更多详情,请参阅Rcpp 包 https://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-package.pdf小插图,例如这个问题 https://stackoverflow.com/questions/50354302/rcpp-sourcecpp-undefined-symbol。顺便说一句,因为 R 没有unsigned int类型,我不确定你的返回值是否有效。您可能需要切换到int or double。我还收到了与您不同的错误消息:

dyn.load 中的错误(“/tmp/RtmpSbvXHx/sourceCpp-i686-pc-linux-gnu-0.12.17/sourcecpp_625ad24a943/sourceCpp_2.so”): 无法加载共享对象'/tmp/RtmpSbvXHx/sourceCpp-i686-pc-linux-gnu-0.12.17/sourcecpp_625ad24a943/sourceCpp_2.so': /tmp/RtmpSbvXHx/sourceCpp-i686-pc-linux-gnu-0.12.17/sourcecpp_625ad24a943/sourceCpp_2.so:未定义符号:_Z7add_onej

您确定上面的代码正是您使用的吗?

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

使用 Rcpp 将目标文件链接到函数的简化示例[重复] 的相关文章

  • RCPP_MODULE 用于继承类

    当我尝试使用继承类的模块时遇到问题 基本上 我无法编译这部分 RCPP MODULE PACE using namespace Rcpp class
  • rcpp 检查列表是否有元素

    我的程序涉及聚类 除了数据集之外 用户还必须指定一些有关集群的详细信息 有两种方法可以解决此问题 指定集群数量或准备集群描述列表 args lt list dataset points K 5 args lt list dataset po
  • 与逻辑语句匹配的 Rcpp 矩阵的子集

    在 R 中 如果我们有一个数据矩阵 比如一个 100 x 10 矩阵 X 以及一个具有可能值 0 1 2 3 的 100 元素向量 t 我们可以使用简单的方法轻松找到 X 的子矩阵 y句法 y X t 1 但是 问题是 我如何使用 Rcpp
  • R的sum()和Armadillo的accu()之间的区别

    R的结果存在微小差异sum 函数和 RcppArmadillo 的accu 当给定相同的输入时函数 例如 以下代码 R vec lt runif 100 0 0 00001 accu vec sum vec C Rcpp depends R
  • 用于矩阵向量乘积的 Rcpp Parallel 或 openmp

    我正在尝试对共轭梯度的朴素并行版本进行编程 所以我从简单的维基百科算法开始 我想改变dot products and MatrixVector产品通过其适当的并行版本 Rcppparallel 文档具有以下代码dot product使用并行
  • 使用 Rcpp Sugar 将平均值和标准差传递到 dnorm()

    我正在将一些 R 代码转换为 Rcpp 代码 并且需要计算给定均值向量和标准差向量的观察向量的可能性 如果我假设平均值为 0 标准差为 1 我可以编写这个函数 运行这个函数需要加载 inline 和 Rcpp 包 dtest1 cxxfun
  • Rcpp包DLL可以在不重新启动R的情况下卸载吗?

    在 Windows 上安装 Rcpp 软件包时 需要确保软件包 DLL 已卸载 否则在复制新 DLL 时会出现 权限被拒绝 错误 这意味着每次重新编译时都要重新启动 R 这非常烦人 有没有办法在不杀死R的情况下卸载包DLL 我已经尝试过de
  • RStudio 在多次调用 Rcpp 函数后崩溃

    我编写了一些 Rcpp 代码来查找两条分段线性曲线的交点 我以需要嵌套循环 检查所有段对 的天真的方式解决了这个问题 所以为了速度而转向 Rcpp 该问题在 示例 1 中进行了图示描述 https prezi com rwkji leuwd
  • RcppEigen 稀疏矩阵插入操作给出无效类“dgCMatrix”错误

    我正在尝试加快使用 C 的速度来快速构建一些在 R 中使用的稀疏矩阵 但是 我似乎无法使用 insert 方法来更改 Eigen 中稀疏矩阵的单个元素并获得正确的 R 对象dgCMatrix 类 下面是一个简单的例子 C 代码是 inclu
  • 使用 Rcpp 将循环从 R 转换为 C++

    我想使用 Rcpp 提高一些 R 代码的速度 然而我对C 的了解却很少 因此 我检查了 Rcpp 提供的文档 以及 Dirk Eddelbuttel 网站上提供的其他文档 阅读完所有内容后 我尝试执行一个用 R 编写的简单循环 不幸的是 我
  • Rcpp 函数比相同的 R 函数慢

    我一直在编写一个 R 函数来计算特定分布的积分 请参见下面的代码 EVofPsi function psi probabilityMeasure eps 0 01 distFun function u probabilityMeasure
  • RcppArmadillo 伽马分布在具有相同种子的平台之间有所不同

    我正在研究一套 https github com osorensen BayesMallows 它使用来自 RcppArmadillo 的随机数 该软件包运行 MCMC 算法 为了获得精确的再现性 用户应该能够设置随机数种子 这样做时 看起
  • 矩阵列表乘以标量,Rcpp 中不保留维度属性

    我正在使用 Rcpp 来加速一些 R 代码 实际上这是我 2014 年 待办事项 列表中的项目之一 部分代码包括将矩阵列表乘以标量 我能够得到结果 尽管如此 矩阵不再是矩阵 而是向量 我想要一个矩阵列表作为最终输出 这是我到目前为止的代码
  • 使用 Rcpp 模块暴露带有引用参数的 C++ 类方法时出错

    我的目标是构建一个数据集类和一个模型类 并将它们都暴露给 R 模型类有一个train 方法引用数据集实例 这似乎是我问题的根源 这是它的样子 glue cpp include
  • dqrng 与 Rcpp 用于从正态分布和二项分布中绘制

    我正在尝试学习如何从 Rcpp OpenMP 循环内的正态分布和二项式分布中抽取随机数 我使用以下代码编写了R rnorm and R rbinom我理解这是一个不要那样做 https stackoverflow com a 5471791
  • RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

    一切似乎都在我的包中工作 但我想检查其步骤是否正确以及使用 Map 的内存使用情况 这是一个简单的示例 位于内联示例和fastLm 例子 这是一个内联函数 它取矩阵每一列的最大值 library Rcpp library inline li
  • Rcpp:动态更新列表

    我正在寻找动态更新列表的解决方案 include
  • 在 Linux 集群上安装 R `forecast` 包:编译器问题?

    我正在寻找测试性能R 更具体地说是一些例程forecast封装在具有 Intel Xeon Phi 协处理器的 HPC 集群上 据我所知 系统管理员已经建立了R 3 2 5按照英特尔网站上的说明从来源获取 https software in
  • 在Rcpp中编译多个源文件

    我有以下目录结构 my func my func r cpp my func c my func h my func test c matrix matrix h matrix c The matrix目录包含一些矩阵结构matrix h以
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D

随机推荐

  • 使用共享包中的 GWT NumberFormat 类

    在我的 GWT 项目中 我的服务返回一个类型的对象Shield我已经定义了 作为Shield客户端和服务器都使用类型 我已将类定义放在共享包中 The Shield类使用com google gwt i18n client NumberFo
  • jquery CSS calc() 函数

    我看到了这个页面CSS链接 http www w3 org TR css3 values calcltexpressiongt我情不自禁地喜欢计算不同单位的结果的想法 不过我尝试过这个 selector css width calc 100
  • Excel::Writer::XLSX 在公式中添加了意外的 @

    我正在使用以下命令将公式写入 xlsx 文件Excel Writer XLSX use Excel Writer XLSX my workbook Excel Writer XLSX gt new test xlsx my workshee
  • 为什么将 NaN 转换为 long 会产生有效结果?

    在下面的示例代码中 我除以零 当我使用调试器单步调试它时 被除数 除数 会产生无穷大或 NaN 如果除数为零 当我将此结果转换为 long 时 我会得到一个有效结果 通常类似于 9223372036854775808 为什么这个演员阵容有效
  • 在电子邮件中设置 tr 或 td 样式?

    我想更改整行单元格的背景颜色和字体大小 和内联样式 因为我不能使用样式表或
  • Xunit 多个 IClassFixtures

    我的问题是如何在一个测试类中设置多个装置 但是Zoo类的构造函数不能处理多个灯具 例如 public class Zoo IClassFixture
  • Symfony2 访问服务中的用户和学说

    我在很多控制器操作中运行与此代码等效的代码 基本上它会获取用户的用户名 如果该用户名附加到博客实体 它将允许用户查看博客实体 em this gt getDoctrine gt getManager user this gt get sec
  • Swift - 具有类型和协议的属性

    在我的 Objective C 类之一中 我有一个 type 属性UIViewController
  • 由于多部分无法加载文件:未找到边界

    我正在尝试从桌面上传图像 但未找到多部分边界的错误 如何设置图片上传的边界 这是我第一次上传图片 请大家多多指教 用户上传图片时的html事件监听器 document getElementById image file addEventLi
  • 通过 openshift 服务器在移动设备上出现 https 安全证书不受信任错误

    我正在 openshift 上启动一个应用程序 我从 namecheap 购买了 comodo Positive ssl 并按照说明在 openshift 上安装 它在桌面浏览器上运行良好 但在 Android 浏览器上出现以下 不可信 错
  • 在 Grails 中,命令“tomcat:deploy”不会像命令“dev war”那样生成完整的战争

    命令 grails dev war 完美部署在我的本地 Tomcat6 服务器中 生成了一个包含以下文件夹的战争 css images js META INF plugins WEB INF 不幸的是 我需要该命令tomcat 部署也有效
  • 如何仅迭代元组的第一个变量

    在Python中 当你有一个元组列表时 你可以迭代它们 例如 当你有 3d 点时 for x y z in points pass do something with x y or z 如果您只想使用第一个变量 或者第一个和第三个变量 该怎
  • case 表达式中是否可以使用不同的数据类型?

    我有这个查询 SELECT CASE WHEN dbo CFE PPHY P77 IS NOT NULL OR dbo CFE PPHY P77 lt gt THEN MONTH dbo CFE PPHY P77 WHEN dbo CFE
  • 直接使用GET和POST有哪些漏洞?

    我想知道有哪些漏洞而直接使用 GET 和 POST 变量 即没有修剪和addslashes函数和mysql转义字符串之类的东西 我的问题是 我们还需要照顾什么在使用 GET 和 POST 时 有哪些类型的攻击比如SQL注入 一般来说 不仅限
  • 将字符串转换为类对象[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用将类对象存储到字符串中toSt
  • 如何将一个巨大的文件分割成多个单词?

    如何从文本文件中读取很长的字符串 然后对其进行处理 拆分为单词 我尝试过StreamReader ReadLine 方法 但我得到了OutOfMemory例外 显然 我的队伍非常长 这是我的读取文件的代码 using var streamR
  • 日期范围内的日期范围

    实际上这个任务对我来说似乎很容易 但我有点卡住了 非常感谢一些提示 D 我有一些带有开始和结束时间的事件 我想创建一个包含日历周的表格 因此 我编写了一个方法来检查本周内是否有事件 并将其着色如下 private boolean inWee
  • 通过 f11 启用全屏后通过 javascript 禁用全屏

    通过按下面的按钮 我可以启用和禁用全屏模式 但按下 f12 后 我无法禁用全屏模式 我参考了其他答案 他们只提供了一种方法来检测窗口是否处于全屏模式 我是无法获取从全屏禁用全屏模式的代码 通过 f11 键制作 我尝试通过代码触发 f11 但
  • 以 PDF 形式通过电子邮件发送 Google 表格

    我有这个脚本 它通过电子邮件向我发送 Google 电子表格的 PDF 我只希望它通过电子邮件将第一个 选项卡 发送给我 如果可能的话 将其作为单个 PDF 或 zip 文件发送给我 想知道是否有人可以提供帮助 另外 其中一个 选项卡 是隐
  • 使用 Rcpp 将目标文件链接到函数的简化示例[重复]

    这个问题在这里已经有答案了 我现有的 C 代码由三个文件组成 头文件 h 文件 库文件 o 文件 和源文件 它们目前在 UNIX 下运行 并在 Matlab 中编译为 mex 文件 我想使用 Rcpp 将它们移植到 R 它们都又长又复杂 所