- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图从另一个 .cpp 文件调用 c++ 函数。我使用了 .h header 。看看下面我做了什么。
tôi có một cáif.htài liệu:
#ifndef PACKAGENAME_ADD_H
#define PACKAGENAME_ADD_H
#include
Rcpp::NumericVector f(Rcpp::NumericVector x) ;
#kết thúc nếu
f.cpptài liệu:
#include
using namespace Rcpp;
NumericVector f(NumericVector x) {
return x * 2;
}
g.cpptài liệu:
#include
#include
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector g(NumericVector x) {
return f(x);
}
这三个文件在同一个文件夹中 我在运行 g.cpp 时遇到此错误:
Rcpp::sourceCpp('~/g.cpp')
Error in dyn.load("/tmp/Rtmpdu4AWp/sourceCpp-x86_64-pc-linux-gnu-0.12.17/sourcecpp_260f5e1a9ebc/sourceCpp_9.so") : unable to load shared object '/tmp/Rtmpdu4AWp/sourceCpp-x86_64-pc-linux-gnu-0.12.17/sourcecpp_260f5e1a9ebc/sourceCpp_9.so': /tmp/Rtmpdu4AWp/sourceCpp-x86_64-pc-linux-gnu-0.12.17/sourcecpp_260f5e1a9ebc/sourceCpp_9.so: undefined symbol: _Z1fN4Rcpp6VectorILi14ENS_15PreserveStorageEEE
有人可以帮助我吗?我在 ubuntu 18.04 上工作,我有 R 3.4.4 版本。
câu trả lời hay nhất
hiện hữu Rcpp
的背景下我最熟悉的处理这个问题的方式是通过创建一个包。如果您在原始帖子中出现,如 Ralf Stubner 所指出的真的没有必要;更改 <>
周围的括号( f.h
)后在g.cpp
引号( ""
),你的代码用 sourceCpp()
编译对我来说很好:
Rcpp::sourceCpp("g.cpp")
g(1:10)
# [1] 2 4 6 8 10 12 14 16 18 20
(有关详细信息,请参阅 Rcpp Attributes vignette 的第 1.10 节)。
但是,如果您最终需要多个 .cpp
要编译的文件(即,不仅仅是一个依赖于另一个实现的文件),要走的路是创建一个包。这听起来可能涉及或令人生畏,但使用 Rcpp
提供的工具,真的很简单。以下是我将您的代码转换为程序包所采取的步骤:
Rcpp::Rcpp.package.skeleton("SOanswer", example_code = FALSE)
Read-and-delte-me
.src/
文件夹(只有一个小的编辑 -- 将 <>
ở giữa f.h
周围的括号( g.cpp
)更改为引号( ""
))。Rcpp::compileAttributes("SOanswer/")
Và devtools::install("SOanswer/")
然后它应该可以很好地编译,你可以运行 g()
来自 R:
SOanswer::g(1:10)
# [1] 2 4 6 8 10 12 14 16 18 20
我会说我会在那里添加一个步骤 0:阅读 https://cran.r-project.org/package=Rcpp 上的小插图,特别是 Rcpp Introduction 和 Rcpp Package vignettes。您也可以查看 this lovely examplehiện hữu src/
中包含 header 的包由 coatless 提供在评论中。
关于c++ - 从另一个 .cpp 文件调用 cpp 函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52264383/
Hàm sscanf() của ngôn ngữ C: đọc tệp tiêu đề dữ liệu theo định dạng đã chỉ định từ chuỗi: ?
Gần đây, tôi có một câu hỏi về đánh giá trước công việc mà tôi không biết cách giải quyết ngay cả khi đã truy vấn cách thức hoạt động của từng tính năng. Đây là một mã giả. Dưới đây là một hàm có tên foo() sẽ được truyền một giá trị và trả về một giá trị. Nếu bạn chuyển giá trị sau cho hàm foo,
Hàm CStr trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Chuỗi. Tham số biểu thức CStr(biểu thức) là bất kỳ biểu thức hợp lệ nào. Lưu ý rằng thông thường, bạn có thể
Hàm CSng trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Đơn. Tham số biểu thức CSng(biểu thức) là bất kỳ biểu thức hợp lệ nào. Mô tả Thông thường, nó có thể được
Hàm CreateObject tạo và trả về một tham chiếu đến đối tượng Tự động hóa. CreateObject(servername.typename [, location]) Dịch vụ tham số
Hàm Cos trả về cosin của một góc. Cos(số) Đối số số có thể là bất kỳ biểu thức số hợp lệ nào biểu thị một góc theo radian. Mô tả Hàm Cos lấy một góc và trả về tỷ lệ hai cạnh của một tam giác vuông. Tỷ lệ này là
Hàm CLng trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Dài. Tham số biểu thức CLng(biểu thức) là bất kỳ biểu thức hợp lệ nào. Mô tả Thông thường, bạn có thể sử dụng
Hàm CInt trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Số nguyên. Tham số biểu thức CInt(biểu thức) là bất kỳ biểu thức hợp lệ nào. Mô tả Thông thường, nó có thể được
Hàm Chr trả về ký tự tương ứng với mã ký tự ANSI đã chỉ định. Chr(charcode) Tham số charcode là một số xác định ký tự. Mô tả Các số từ 0 đến 31 thể hiện tiêu chuẩn không thể in được
Hàm CDbl trả về một biểu thức đã được chuyển đổi thành kiểu con Variant của Double. Tham số biểu thức CDbl(biểu thức) là bất kỳ biểu thức hợp lệ nào. Mô tả Thông thường, bạn có thể
Hàm CDate trả về một biểu thức đã được chuyển đổi thành kiểu con Biến thể của Ngày. CDate(date) Tham số ngày là bất kỳ biểu thức ngày hợp lệ nào. Giải thích rằng hàm IsDate được sử dụng để xác định d
Hàm CCur trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Tiền tệ. Tham số biểu thức CCu(biểu thức) là bất kỳ biểu thức hợp lệ nào. Mô tả Thông thường,
Hàm CByte trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Byte. Tham số biểu thức CByte(biểu thức) là bất kỳ biểu thức hợp lệ nào. Lưu ý rằng thông thường, bạn có thể
Hàm CBool trả về một biểu thức đã được chuyển đổi thành Biến thể của kiểu con Boolean. Biểu thức CBool(biểu thức) là bất kỳ biểu thức hợp lệ nào. Giải thích nếu cũ
Hàm Atn trả về arctang của một số. Tham số số Atn(number) có thể là bất kỳ biểu thức số hợp lệ nào. Mô tả: Hàm Atn tính tỷ lệ (số) hai cạnh của một tam giác vuông và trả về cung của góc tương ứng.
Hàm Asc trả về mã ký tự ANSI tương ứng với chữ cái đầu tiên của chuỗi. Asc(string) Tham số chuỗi là bất kỳ biểu thức chuỗi hợp lệ nào. Nếu tham số chuỗi không chứa ký tự thì sẽ xảy ra lỗi thời gian chạy.
Hàm Array trả về một Biến thể chứa một mảng. Array(arglist) Tham số arglist là danh sách các giá trị được phân tách bằng dấu phẩy để gán cho các phần tử mảng có trong Biến thể. Nếu tham số này không được chỉ định thì
Hàm Abs trả về giá trị tuyệt đối của một số. Abs(số) Đối số số có thể là bất kỳ biểu thức số hợp lệ nào. Nếu số chứa Null thì trả về Null; nếu biến chưa được khởi tạo thì trả về 0.
Hàm FormatPercent trả về một biểu thức đã được định dạng dưới dạng phần trăm có dấu % ở cuối (nhân với 100). FormatPercent(biểu thức[,NumDigitsAfterD
Hàm FormatNumber trả về một biểu thức đã được định dạng dưới dạng giá trị số. FormatNumber( biểu thức [,NumDigitsAfterDecimal [,Inc
Tôi là một lập trình viên xuất sắc, rất giỏi!