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, а не я:)