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

g++ ld can't find RInside symbols for x86_64 architecture

本文关键字:RInside 符号 64架 ld 找不到 用于 x86 g++      更新时间:2023-10-16

当我尝试用g++编译RInside示例文件时,我得到一个链接器错误,说符号(s)找不到。如有任何帮助,不胜感激。

R 2.13.1版本安装在Mac OS X 10.5上。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

谁能告诉我我做错了什么,如何解决它?如有任何帮助,不胜感激。

我知道这是一个非常古老的问题,但我添加这个以防它帮助别人。

我花了好几个小时来调查这件事。我用的是Mac OS (Mountain Lion 10.7)。我下载了RInside,转到示例并输入make,但一直得到这个ld错误。

新安装的xcode, gcc,在这个线程中提到的和许多其他尝试没有帮助。

我已经使用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

现在,当我进入示例目录并输入make时,它工作得很顺利。

通常与不适合构建目标体系结构的链接库有关。检查框架设置以查看构建它的体系结构(i386比x86_64更常见)。这也可能意味着lib不是为32/64位构建的。如果您能访问源代码,可以考虑重新编译它。

使用的编译器(似乎是64位)和找到的库(显然是32位)之间不匹配,导致链接尝试失败。最简单的解决方案可能是从源代码重新安装Rcpp和RInside;这将为编译器重新创建文件(可能是64位)。

正常构建能力的"证明"由CRAN检查提供,例如Windows上的r补丁检查,您甚至可以自己上传到win-builder。

rcpp-devel列表可以提供进一步的帮助,因为许多OS X用户正在阅读它。我似乎记得在OS X上,从源代码构建是推荐的解决方案,但这是我在OS X上工作的合著者,而不是我:)