当我尝试使用g ++编译RInside示例文件时,我收到链接器错误,指出无法找到符号。任何帮助将不胜感激。
在Mac OS X 10.5上安装了R版本2.13.1。 Rcpp和RInside包含的文件已被复制到usr / include目录中。已使用g ++的-I和-L修饰符包含R头文件和库,如下所示:
$g++ -I/Library/Frameworks/R.framework/Headers -L/Library/Frameworks/R.framework/Libraries rinside_sample0.cpp
rinside_sample0.cpp文件是随RInside软件包提供的示例,如下所示:
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*-
//
// Simple example showing how to do the standard 'hello, world' using embedded R
//
// Copyright (C) 2009 Dirk Eddelbuettel
// Copyright (C) 2010 Dirk Eddelbuettel and Romain Francois
//
// GPL'ed
#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);
}
当我尝试用g ++编译时,我收到一个错误,如下所示:
ld: symbol(s) not found for architecture x86_64
有人可以告诉我我做错了什么以及如何解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:2)
我知道这是一个非常古老的问题,但我补充说这是为了帮助别人。
我花了几个小时看这个。我有一台Mac OS(Mountain Lion 10.7)。
我下载了RInside,转到了示例并输入了make
但仍然收到此ld
错误。
新安装的xcode,gcc as mentioned in this thread以及其他许多尝试都无济于事。
我已经使用RStudio安装了Rcpp。
然而以下为我工作。 从我的Mac终端我重新安装了Rcpp和RInside,正如Dirk建议的那样使用:
R CMD INSTALL ./Downloads/Rcpp_0.10.3.tar.gz
R CMD INSTALL ./Downloads/RInside_0.2.10.tar.gz
现在,当我访问examples目录并键入make
时,它的工作顺利进行。
希望这可以帮助使用OS X的人,他们来看这个问题。
答案 1 :(得分:1)
通常与链接不适合构建目标体系结构的库有关。检查框架设置以查看它的构建体系结构(i386比x86_64更常见)。这也可能意味着lib不是为32/64位构建的。如果您有权访问源代码,可以考虑重新编译它。
答案 2 :(得分:1)
您使用的编译器(看似64位)和找到的库(显然是32位)之间的不匹配会导致链接尝试失败。最简单的解决方案可能是从源代码重新安装Rcpp和RInside;这将为编译器重新创建文件(大概是64位)。
正常构建能力的“证明”由CRAN检查提供为eg this R-patched on Windows check,您甚至可以自己上传到win-builder。
rcpp-devel列表可以为此提供进一步的帮助,因为有几个OS X用户正在阅读它。我似乎记得在OS X上构建源代码是推荐的解决方案,但是我的合着者在OS X上工作而不是我:)