g ++ ld找不到x86_64架构的RInside符号

时间:2011-07-30 02:45:15

标签: c++ r x86-64 ld rinside

当我尝试使用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

有人可以告诉我我做错了什么以及如何解决这个问题?任何帮助将不胜感激。

3 个答案:

答案 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上工作而不是我:)