Linker 在Rcpp中使用外部c库

Linker 在Rcpp中使用外部c库,linker,rcpp,Linker,Rcpp,我想使用一个c函数“rpg_hybrid”,它对应于我的Rcpp代码中的R库BayesLogit rpg()。我已经将LogitWrapper.h和库BayesLogit.so包含到链接阶段。GCC仍然找不到rpg_hybrid。尽管您似乎已经解决了问题,但我将在开发您可能希望发布到CRAN的R包的背景下提供答案 基本上,BayesLogit的作者需要明确地将这些例程提供给其他包作者。这在中进行了描述。从源代码中我可以看到,这还没有完成,因此您将无法以可移植的方式调用该包中的本机C/C++代码

我想使用一个c函数“rpg_hybrid”,它对应于我的Rcpp代码中的R库BayesLogit rpg()。我已经将LogitWrapper.h和库BayesLogit.so包含到链接阶段。GCC仍然找不到rpg_hybrid。

尽管您似乎已经解决了问题,但我将在开发您可能希望发布到CRAN的R包的背景下提供答案


基本上,
BayesLogit
的作者需要明确地将这些例程提供给其他包作者。这在中进行了描述。从源代码中我可以看到,这还没有完成,因此您将无法以可移植的方式调用该包中的本机C/C++代码,因此CRAN是可接受的

你的选择是:

  • 联系软件包作者,询问他们是否可以使用此例程
  • 将源代码复制到您自己的包中并给出属性;如果您这样做,请确保您使用的许可证与他们的许可证兼容

  • 另一方面,Rcpp还具有使源代码仅以头的方式可用的功能。包作者可能会确信通过使用一些例程可以使用,因为它提供了一种简单的机制,允许其他作者在包中使用C++代码;参见第3.5节。

    我班的一名学生向我指出了你的问题。虽然我没有时间去做凯文/德克建议的事情,但我已经把一个更友好的C++ API发布到我的GITHUB页面。 看

    这是R包框架的形式,可以很容易地修改。我希望这将是一个可行的备用在过渡期间,直到我们可以修改BayesLogit适当


    -James

    您是从源代码安装包
    BayesLogit
    还是安装了CRAN二进制文件?您可能需要尝试从源代码安装
    BayesLogit
    。此外,请尝试使用
    -v
    选项进行编译,以查看GCC是否正在按预期查找路径和正确位置。我们需要更多详细信息,正如@KevinUshey所建议的。现在这个问题无法回答,我已经解决了。我将*.so文件视为库文件,它应视为对象文件。这两个克兰二进制或安装从源代码工程。我如何在Rcpp包发布中实现自动化?