&引用;RcppArmadilloExtensions/sample.h“;程序包生成步骤中的链接器错误

&引用;RcppArmadilloExtensions/sample.h“;程序包生成步骤中的链接器错误,rcpp,armadillo,r-package,Rcpp,Armadillo,R Package,我正在制作一个R包,它在一些源文件中使用了Rcpp::RcppArmadillo::sample()函数。特别是,我在4个不同的cpp文件中使用了该函数,并在每个文件中添加了这一行#include,以包含所需的头文件 在我想通过命令R CMD build mypackage构建包之前,一切都正常。我得到了重复符号错误,其中提到的头文件中定义的大多数函数都列为重复符号。例如,probsampleneplace、FixProb、sampleplace和walkerprobssampleplace等函

我正在制作一个R包,它在一些源文件中使用了
Rcpp::RcppArmadillo::sample()
函数。特别是,我在4个不同的cpp文件中使用了该函数,并在每个文件中添加了这一行
#include
,以包含所需的头文件

在我想通过命令
R CMD build mypackage
构建包之前,一切都正常。我得到了重复符号错误,其中提到的头文件中定义的大多数函数都列为重复符号。例如,
probsampleneplace
FixProb
sampleplace
walkerprobssampleplace
等函数都列为在这4个cpp文件之间重复的函数

我用谷歌搜索了这个问题,解决方法是在
.cpp
文件中定义变量或函数,而不是在
.h
文件中定义,以防止重复,如果您想在任何其他
cpp
文件中使用这些变量,请使用
extern
。但是我认为这个解决方案不适用于这里,因为头文件不是我写的,我不想对
sample.h
头文件进行任何更改


有没有解决这个问题的建议?提前感谢您的帮助

根据德克的评论,这最终对我有效,如下所示:

我删除了每个文件顶部的冗余头并将其放在一个地方。它可以是一个访问函数,可以在任何需要的地方调用。
另一种选择是,如果您的整个项目没有那么大,您可以将标题
#include
放在一个
文件的顶部。包含多个函数的cpp
文件可以处理该作业。我做了后者,我的
.cpp
文件大约有400行。

根据德克的评论,这最终对我有效,如下所示:

我删除了每个文件顶部的冗余头并将其放在一个地方。它可以是一个访问函数,可以在任何需要的地方调用。
另一种选择是,如果您的整个项目没有那么大,您可以将标题
#include
放在一个
文件的顶部。包含多个函数的cpp
文件可以处理该作业。我做了后者,我的
.cpp
文件大约有400行。

你需要显示你的代码。这是不可复制的。“特别是,我在4个不同的cpp文件中使用了该函数”。你不能。它只能在一个文件中。这4个cpp文件中的每一个都有不同的用途,它们都需要该功能。所以我想你是建议把它们合并成一个文件。我想应该有另一种方法。谢谢,德克。你只能包含一次标题。如果您在不同的地方需要该功能,请编写一个从四个文件调用的访问函数。但是只有一个
#包含
sample()
文件的
。太棒了!这确实奏效了!我最初认为它与其他可以添加到每个cpp文件开头的
#include
行相同。不管怎样,你还是一如既往地救了我。谢谢你,德克!您需要显示您的代码。这是不可复制的。“特别是,我在4个不同的cpp文件中使用了该函数”。你不能。它只能在一个文件中。这4个cpp文件中的每一个都有不同的用途,它们都需要该功能。所以我想你是建议把它们合并成一个文件。我想应该有另一种方法。谢谢,德克。你只能包含一次标题。如果您在不同的地方需要该功能,请编写一个从四个文件调用的访问函数。但是只有一个
#包含
sample()
文件的
。太棒了!这确实奏效了!我最初认为它与其他可以添加到每个cpp文件开头的
#include
行相同。不管怎样,你还是一如既往地救了我。谢谢你,德克!