g++ ld не может найти символы RInside для архитектуры x86_64

Я получаю ошибку компоновщика, говорящую, что символы не могут быть найдены, когда я пытаюсь скомпилировать файл примера RInside с g++. Любая помощь будет оценена.

Версия R 2.13.1 установлена ​​на Mac OS X 10.5. Включенные файлы Rcpp и RInside были скопированы в каталог usr/include. Заголовки и библиотеки R были включены с использованием модификаторов -I и -L в g ++, как показано ниже:

$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 ответа

Решение

Я знаю, что это очень старый вопрос, но я добавляю его на тот случай, если это поможет кому-то еще.

Я провел часы и часы, глядя на это. У меня Mac OS (Mountain Lion 10.7). Я скачал RInside, перешел к примерам и набрал make но продолжал получать это ld ошибка.

Новые установки xcode, gcc, как упоминалось в этой теме, и многочисленные другие попытки не помогли.

У меня уже был установлен Rcpp с использованием RStudio.

Однако у меня сработало следующее. С моего терминала Mac я переустановил 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, который приходит посмотреть на этот вопрос.

Обычно связано с компоновкой библиотек, которые не подходят для целевой архитектуры сборки. Проверьте настройки фреймворка, чтобы увидеть архитектуру, для которой он построен (i386 встречается чаще, чем x86_64). Это также может означать, что lib не создана для обоих 32/64 битов. Возможно, стоит подумать о перекомпиляции, если у вас есть доступ к источникам.

У вас есть несоответствие между используемым компилятором (по-видимому, 64-битным) и найденной библиотекой (по-видимому, 32-битным), что делает попытку соединения неудачной. Возможно, самое простое решение - переустановить Rcpp и RInside из исходных текстов; это воссоздает файлы для компилятора (предположительно, 64-битный).

"Доказательство" нормальной способности сборки обеспечивается проверками CRAN, например, проверкой R-заплаток на Windows, и вы даже можете загрузить ее в win-builder самостоятельно.

Список rcpp-devel может помочь в этом, поскольку его читают несколько пользователей OS X. Кажется, я вспоминаю, что для OS X сборки из исходного кода - это рекомендуемое решение, но мой соавтор работает на OS X, а не я:)

Другие вопросы по тегам