Проблема с компиляцией примеров RInside под Windows

Я пытаюсь настроить RInside на работе, где мы вынуждены использовать среду Windows.

Я установил RTools и загрузил двоичный файл RInside из CRAN.

Моя установка R находится в c:\R\R-2.12.2, поэтому нет проблем с папками с пробелами.

Я установил пакеты Rcpp и RInside в R.

Я выполняю следующий make-файл Makefile.win, включенный в загруженный бинарный файл RInside

## -*- mode: makefile; tab-width: 8; -*-
##
## Simple Makefile
##
## TODO:
##  proper configure for non-Debian file locations,   [ Done ]
##  allow RHOME to be set for non-default R etc

## comment this out if you need a different version of R,
## and set set R_HOME accordingly as an environment variable
R_HOME :=       'cygdrive/c/R/R-2.12.2'

sources :=      $(wildcard *.cpp)
programs :=         $(sources:.cpp=)

## include headers and libraries for R
RCPPFLAGS :=        $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS :=         $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS :=        $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK :=      $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)

## include headers and libraries for Rcpp interface classes
RCPPINCL :=         $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --    slave)
RCPPLIBS :=         $(shell echo 'Rcpp:::LdFlags()'  | $(R_HOME)/bin/R --vanilla --slave)

## include headers and libraries for RInside embedding classes
RINSIDEINCL :=      $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS :=      $(shell echo 'RInside:::LdFlags()'  | $(R_HOME)/bin/R --vanilla --slave)

## compiler etc settings used in default make rules
CXX :=          $(shell $(R_HOME)/bin/R CMD config CXX)
CPPFLAGS :=         -Wall $(shell $(R_HOME)/bin/R CMD config CPPFLAGS)
CXXFLAGS :=         $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell     $(R_HOME)/bin/R     CMD config CXXFLAGS)
LDFLAGS =       -s
LDLIBS :=       $(RLDFLAGS) $(RBLAS) $(RLAPACK) $(RINSIDELIBS) $(RCPPLIBS) 
CC :=           $(shell $(R_HOME)/bin/R CMD config CXX)

all :           $(programs)

clean:
        rm -vf $(programs)

с командой

make -f Makefile.win

попробовать построить стандартные примеры включены

Однако я получаю следующую ошибку:

C:\RInside_0.2.3\RInside\examples\standard>make -f Makefile.win
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
cygdrive/c/R/R-2.12.2/bin/R: not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
make: cygdrive/c/R/R-2.12.2/bin/R: Command not found
Wall  -s  rinside_callbacks0.cpp        -o rinside_callbacks0
make: Wall: Command not found
make: [rinside_callbacks0] Error 127 (ignored)
Wall  -s  rinside_module_sample0.cpp        -o rinside_module_sample0
make: Wall: Command not found
make: [rinside_module_sample0] Error 127 (ignored)
Wall  -s  rinside_sample0.cpp        -o rinside_sample0
make: Wall: Command not found
make: [rinside_sample0] Error 127 (ignored)
Wall  -s  rinside_sample1.cpp        -o rinside_sample1
make: Wall: Command not found
make: [rinside_sample1] Error 127 (ignored)
Wall  -s  rinside_sample2.cpp        -o rinside_sample2
make: Wall: Command not found
make: [rinside_sample2] Error 127 (ignored)
Wall  -s  rinside_sample3.cpp        -o rinside_sample3
make: Wall: Command not found
make: [rinside_sample3] Error 127 (ignored)
Wall  -s  rinside_sample4.cpp        -o rinside_sample4
make: Wall: Command not found
make: [rinside_sample4] Error 127 (ignored)
Wall  -s  rinside_sample5.cpp        -o rinside_sample5
make: Wall: Command not found
make: [rinside_sample5] Error 127 (ignored)
Wall  -s  rinside_sample6.cpp        -o rinside_sample6
make: Wall: Command not found
make: [rinside_sample6] Error 127 (ignored)
Wall  -s  rinside_sample7.cpp        -o rinside_sample7
make: Wall: Command not found
make: [rinside_sample7] Error 127 (ignored)
Wall  -s  rinside_sample8.cpp        -o rinside_sample8
make: Wall: Command not found
make: [rinside_sample8] Error 127 (ignored)
Wall  -s  rinside_sample9.cpp        -o rinside_sample9
make: Wall: Command not found
make: [rinside_sample9] Error 127 (ignored)
Wall  -s  rinside_test0.cpp        -o rinside_test0
make: Wall: Command not found
make: [rinside_test0] Error 127 (ignored)
Wall  -s  rinside_test1.cpp        -o rinside_test1
make: Wall: Command not found
make: [rinside_test1] Error 127 (ignored)

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

Надеюсь, у кого-нибудь есть ценная идея, которой можно поделиться!

Заранее спасибо,

Кристиан

3 ответа

Решение

У меня похожая настройка на работе, поэтому я дал этому шанс. Я могу построить примеры после того, как я укажу R_LIBS_SITE, Обратите внимание, что это должен быть путь Windows, а не путь Cygwin!

export R_LIBS_SITE=c:/R/site-library

Кажется, у вас есть две разные проблемы:

  1. Ваш $PATH вероятно выключен, или, как намекнул Джош, ваш $R_HOME назначение неверно. Если make это действительно двоичный файл из Rtools, и пути, которые вы назначаете, верны, тогда сборки успешны. Это общее правило для сборки пакетов R в Windows: очень внимательно следуйте инструкции, и она будет работать.

  2. Rinside не работает на Windows, извините. Он будет построен, и вы получите segfaults. Мы с Роменом четко заявляем об этом в документации.

Поскольку Ромен и я работаем почти исключительно на OS X и Linux соответственно, мы будем благодарны за помощь в отладке. Это должно быть выполнимо, но, вероятно, требует некоторой серьезной готовности изучать внутренности R, поскольку что-то в подсистеме памяти обанкротилось. Который это явно не делает на ОС с X в их названии.

Обновлено 08 декабря 2011 года. Начиная с версии 0.2.5, в CRAN на сегодняшний день восстанавливается функциональность Windows - с помощью исправления, отмеченного Джеймсом в другом комментарии.

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

В RInside::initialize(……) структура structRStart заполняется, однако для этого теперь требуется заполнить дополнительные поля в случае окон, как показано в Rf_initEmbeddedR() из R\src\gnuwin32\embedded.c.

Rp->rhome = RHome;
Rp->home = getRUser();
Rp->CharacterMode = LinkDLL;
Rp->ReadConsole = myReadConsole;
Rp->WriteConsole = myWriteConsole;
Rp->CallBack = myCallBack;
Rp->ShowMessage = askok;
Rp->YesNoCancel = askyesnocancel;
Rp->Busy = myBusy;

Эквивалентные назначения будут необходимы в RInside.cpp для обеспечения допустимых обратных вызовов.

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