【问题标题】:g++ ld can't find RInside symbols for x86_64 architectureg++ ld 找不到 x86_64 架构的 RInside 符号
【发布时间】:2011-10-16 09:12:20
【问题描述】:

当我尝试使用 g++ 编译 RInside 示例文件时,我收到一个链接器错误,提示找不到符号。任何帮助将不胜感激。

R 版本 2.13.1 安装在 Mac OS X 10.5 上。 Rcpp 和 RInside 包含文件已复制到 usr/include 目录。 R 头文件和库已使用 g++ 的 -I 和 -L 修饰符包含在内,如下所示:

$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

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

【问题讨论】:

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


    【解决方案1】:

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

    我花了好几个小时研究这个问题。我有一个 Mac OS(Mountain Lion 10.7)。 我下载了 RInside,查看示例并输入了 make,但一直收到此 ld 错误。

    新安装的 xcode、gcc as mentioned in this thread 和许多其他尝试都没有帮助。

    我已经使用 RStudio 安装了 Rcpp。

    但是以下对我有用。 从我的 Mac 终端中,我按照 Dirk 的建议重新安装了 Rcpp 和 RInside:

    R CMD INSTALL ./Downloads/Rcpp_0.10.3.tar.gz 
    R CMD INSTALL ./Downloads/RInside_0.2.10.tar.gz
    

    现在,当我转到示例目录并输入 make 时,它可以顺利运行。

    希望这可以帮助使用 OS X 的人来查看这个问题。

    【讨论】:

      【解决方案2】:

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

      CRAN 检查以eg this R-patched on Windows check 提供正常构建能力的“证明”,您甚至可以自己上传到win-builder

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 如何检查框架设置以查看它是为哪个架构构建的?
        • 在 shell 中尝试:文件 DIR/TO/Lib.a
        猜你喜欢
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        相关资源
        最近更新 更多