获取RInside例如有额外的链接选项-framework工作(Getting RInside ex

2019-10-18 23:18发布

我得到了RInside例子来运行和工作,但我不得不手动添加链接器选项:在年底G“-F /库/框架/ R.framework / .. -framework R” ++(在Mac雪豹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:

克++ -o DIST /调试/ GNU-MacOSX的/ callingrproject构建/调试/ GNU-MacOSX的/ main.o - L /库/框架/ R.framework /资源/ lib中-L /库/框架/ R.framework /资源/库/ RCPP / lib目录-L /库/框架/ R.framework /资源/库/ RInside / lib目录-L /库/框架/ R.framework /库-L /库/框架/ R.framework /资源/ lib目录 - L /库/框架/ R.framework /资源/库-L /库/框架/ R.framework /资源/模块-lRcpp -lRInside -lRlapack -lRblas -F /库/框架/ 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

Answer 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说法 。



Answer 2:

RInside需要R作为它嵌入R.

这就是为什么你得到一个关于基础研发标识符丢失时,它不存在链接错误。

现在,我不知道为什么这些链接指令,其中不存在。 我们的Makefile目录中的examples/standard (从该第一示例来)使用

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

所有这些变量在设置Makefile本身。 这一个是

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

而且应包括R和它的图书馆。



文章来源: Getting RInside example to work with extra linker option -framework