首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rcpp代码在Mac上编译,而在linux上不编译。

Rcpp代码在Mac上编译,而在linux上不编译。
EN

Stack Overflow用户
提问于 2018-04-03 19:17:50
回答 1查看 147关注 0票数 3

我的C++代码是接收字符向量并将其转换为std::set。以下代码在Mac上编译,但在Linux上不编译:

代码语言:javascript
运行
复制
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
void test(CharacterVector x) {
  std::set<std::string> vs(x.begin(), x.end());
}

Linux编译失败的有:

代码语言:javascript
运行
复制
/usr/include/c++/4.8.2/bits/stl_function.h:481:7: note:   no known conversion for argument 1 from ‘Rcpp::internal::string_proxy<16>’ to ‘const std::basic_string<char>&’

Mac信息:

R版本3.4.1 (2017-06-30)平台: x86_64-apple-darwin15.6.0 (64位),运行于: macOS HighSierra10.13.3 Rcpp_0.12.16

Linux信息:

R版本3.4.2 (2017-09-28)平台: x86_64-redhat- Linux -gnu (64位)运行于: CentOS Linux 7(核心) Rcpp_0.12.16

作为一种解决办法,我可以首先将字符向量转换为std:: vector,然后将std::vector转换为std::set。然而,这会在我的测试中造成5-10%的性能损失,这是我想要避免的。

这是个虫子吗?如何在linux上正确地执行此操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 19:25:58

此变体适用于Ubuntu17.10上的g++ 7.2:

代码语言:javascript
运行
复制
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
void test(std::vector<std::string> x) {
  std::set<std::string> vs(x.begin(), x.end());
}

跑(但什么也不做)

代码语言:javascript
运行
复制
R> Rcpp::sourceCpp("/tmp/soQ.cpp")
R> test(rep("lalala", 3))
R> 

字符向量是复杂的;迭代器可能存在一些不太理想的东西。谨慎的PRs是受欢迎的;同时,您有一个简单的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49637621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档