Сборка пакета R с помощью Rtools4.0 в Windows 10

Я пытаюсь построить Rпакет с помощью RTools4.0 на машине с Windows 10. Моему пакету нужна библиотека SBML C и статические библиотеки для SBML для создания пакетов R в Window, предоставляемыеRTools4.0 ссылка

Мне удалось успешно установить RTools4.0и дополнительная библиотека SBML. Я проверил, что у меня есть файлы заголовков для SBML в

C:\rtools40\mingw64\include\sbml> и libsbml.a файл n

C:\rtools40\mingw64\lib>

Обновлено с последней информацией

Мой пакет успешно создается на Mac OSX (Mojave) (без RTools4.0), однако я столкнулся с проблемами при установке моего пакета в Windows.

Содержимое моего Makevars.win файл следующие:

CXX=clang++
PKG_CPPFLAGS= -I/mingw$(WIN)/include/
PKG_LIBS= $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lsbml -lbz2 -lz -lxml2 -liconv -lws2_32

Я могу выбрать rtools40 и соберите пакет, используя следующие команды изнутри RStudio

Sys.setenv(PATH = paste("C:/rtools40/mingw64/bin", Sys.getenv("PATH"), sep=";"))
Sys.setenv(PATH = paste("C:/rtools40/mingw32/bin", Sys.getenv("PATH"), sep=";"))
Sys.setenv(BINPREF = "C:/rtools40/mingw32/bin/")  
devtools::install()

И ошибка, которую я получаю, приведена ниже:

Installing Rcppsbml
"C:/PROGRA~1/R/R-34~1.1/bin/x64/R" --no-site-file --no-environ --no-save  \
  --no-restore --quiet CMD INSTALL  \
  "C:/Users/sn248/Documents/GitHub/Rcppsbml"  \
  --library="C:/Users/sn248/Documents/R/win-library/3.4"  \
  --install-tests 

* installing *source* package 'Rcppsbml' ...
** libs

*** arch - i386
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw32/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c convertReactions.cpp -o convertReactions.o
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw32/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c printSBML.cpp -o printSBML.o
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw32/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c rcpp_hello.cpp -o rcpp_hello.o
C:/rtools40/mingw32/bin/g++ -shared -s -static-libgcc -o Rcppsbml.dll tmp.def convertReactions.o printSBML.o rcpp_hello.o -LC:/PROGRA~1/R/R-34~1.1/bin/i386 -lRlapack -LC:/PROGRA~1/R/R-34~1.1/bin/i386 -lRblas -lgfortran -lm -lquadmath -lsbml -lbz2 -lz -lxml2 -liconv -lws2_32 -Ld:/Compiler/gcc-4.9.3/local330/lib/i386 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-34~1.1/bin/i386 -lR
installing to C:/Users/sn248/Documents/R/win-library/3.4/Rcppsbml/libs/i386

*** arch - x64
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw64/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c convertReactions.cpp -o convertReactions.o
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw64/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c printSBML.cpp -o printSBML.o
C:/rtools40/mingw32/bin/g++  -I"C:/PROGRA~1/R/R-34~1.1/include" -DNDEBUG -I/mingw64/include/ -I"C:/Users/sn248/Documents/R/win-library/3.4/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c rcpp_hello.cpp -o rcpp_hello.o
C:/rtools40/mingw32/bin/g++ -shared -s -static-libgcc -o Rcppsbml.dll tmp.def convertReactions.o printSBML.o rcpp_hello.o -LC:/PROGRA~1/R/R-34~1.1/bin/x64 -lRlapack -LC:/PROGRA~1/R/R-34~1.1/bin/x64 -lRblas -lgfortran -lm -lquadmath -lsbml -lbz2 -lz -lxml2 -liconv -lws2_32 -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-34~1.1/bin/x64 -lR
C:/PROGRA~1/R/R-34~1.1/bin/x64/Rlapack.dll: file not recognized: file format not recognized
collect2.exe: error: ld returned 1 exit status
no DLL was created
ERROR: compilation failed for package 'Rcppsbml'
* removing 'C:/Users/sn248/Documents/R/win-library/3.4/Rcppsbml'
* restoring previous 'C:/Users/sn248/Documents/R/win-library/3.4/Rcppsbml'
Error: Command failed (1)

Я вроде понимаю, почему получаю сообщение об ошибке, потому что даже для x64, 32-битный компилятор C:/rtools40/mingw32/bin/g++используется. Я не знаю, как написать варианты выбора правильного компилятора дляx64 поскольку BINPREF принимает только 1 каталог в качестве входных данных.

Мой R.version информация представлена ​​ниже:

> R.version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          4.1                         
year           2017                        
month          06                          
day            30                          
svn rev        72865                       
language       R                           
version.string R version 3.4.1 (2017-06-30)
nickname       Single Candle 

Полный код пакета можно найти по адресу - https://github.com/sn248/Rcppsbml

Как видно из выше, я использую R-3.4.1 (которую я пока не могу обновить из-за нетехнических проблем) и другую версию Rtools (подходящую для R-3.4.1) также установлен на моей машине.

У меня следующие вопросы:

Есть ли способ указать использование rtools40 при сборке пакета с использованием RStudioс Clean and Rebuild вариант?

Даже если я смогу установить эту библиотеку на свой компьютер, будет ли она работать на CRAN чеки?

Любая помощь здесь будет очень принята, спасибо!

1 ответ

Решение

Я могу опубликовать ответ на свою проблему, который помог решить проблему с установкой.

Я должен был установить PATH а также BINPREF изнутри R как:

Sys.setenv(PATH = paste("C:/rtools40/mingw$(WIN)/bin", Sys.getenv("PATH"), sep=";"))
Sys.setenv(BINPREF = "C:/rtools40/mingw$(WIN)/bin/")  

затем установка с использованием devtools

devtools::install()

Кажется, пакет успешно установлен на моем компьютере с Windows. Однако я не уверен, как мне убедиться, чтоRTools4.0 выбран для CRAN. Могу ли я установить эти настройки вMakevars.win?

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