1

我让 RInside 示例运行和工作,但我必须手动添加链接器选项:“-F/Library/Frameworks/R.framework/.. -framework R”在 g++ 的末尾(在 Mac Snow Leopard 10.6.8 上使用 Xcode 3.x)。它有效,但我不知道为什么。谁能说出这些选项的实际作用?我在这个列表中找不到它:http: //gcc.gnu.org/onlinedocs/gcc/Link-Options.html

这是原始代码:

#include <RInside.h>                    // for the embedded R via RInside

int main(int argc, char *argv[]) 
{
 RInside R(argc, argv);              // create an embedded R instance 
 R["txt"] = "Hello, world!\n";  // assign a char* (string) to 'txt'
 R.parseEvalQ("cat(txt)");           // eval the init string, ignoring any returns
 exit(0);
}

这是我在 NetBeans 中看到的链接器调用:

g++ -o dist/Debug/GNU-MacOSX/callingrproject build/Debug/GNU-MacOSX/main.o -L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/ library/Rcpp/lib -L/Library/Frameworks/R.framework/Resources/library/RInside/lib -L/Library/Frameworks/R.framework/Libraries -L/Library/Frameworks/R.framework/Resources/lib - L/Library/Frameworks/R.framework/Resources/library -L/Library/Frameworks/R.framework/Resources/modules -lRcpp -lRInside -lRlapack -lRblas -F/Library/Frameworks/R.framework/.. -framework R

最后一部分是我必须手动添加的。没有它,我得到了这两个链接错误:

Undefined symbols:
 "_Rf_mkString", referenced from:
   Rcpp::wrap(char const*)in main.o
 "_R_NilValue", referenced from:
   Rcpp::wrap(char const*)in main.o
4

2 回答 2

1

RInside 需要 R,因为它嵌入了 R。

这就是为什么当基本 R 标识符不存在时,您会收到有关缺少基本 R 标识符的链接器错误。

现在我不知道为什么这些链接说明不存在。我们Makefile在目录中examples/standard(第一个示例来自该目录)使用

LDLIBS :=   $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS)

并且所有这些变量都设置在Makefile自身中。这个是

RLDFLAGS := $(shell $(R_HOME)/bin/R CMD config --ldflags)

这应该包括 R 及其库。

于 2013-11-11T17:55:32.413 回答
1

框架或多或少是一种 Mac 打包应用程序的方式。这些应用程序可能包含我们想要使用的代码 + 头文件 + 库。线

-F/Library/Frameworks/R.framework/..

说,“在文件夹中查找/Library/Frameworks指定的任何框架”,并且

-framework R

说,“R.framework在'框架'目录集中查找文件夹”。

请注意,-framework R参数实际上是由 处理的ld,而不是gcc/ clang,因此您可以在 中找到更多信息man ld-F另一方面,参数gcc/处理clang。它们一起允许您的编译器和链接器找到所需的头文件和库。

特别是,在 Mac 上,它们位于(默认情况下)/Library/Frameworks/R.framework/Headers/Library/Frameworks/R.framework/Libraries-- 这些是通过设置适当的框架标志搜索的目录。

有关-F 参数-framework 参数的更多信息,请参见此处。

于 2013-11-14T00:03:00.187 回答