g ++ ld не может найти символы RInside для архитектуры x86_64 - PullRequest
1 голос
/ 30 июля 2011

Я получаю ошибку компоновщика, говорящую о том, что символы не могут быть найдены при попытке скомпилировать файл примера 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 ]

2 голосов
/ 29 мая 2013

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

Я часами смотрел на это. У меня 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, который придет, чтобы посмотреть на этот вопрос.

1 голос
/ 30 июля 2011

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

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

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

1 голос
/ 30 июля 2011

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

...