Создание .dll-файлов и компиляция кода C ++ с использованием Rcpp в Windows

0

Мне очень тяжело пытаться заставить Rcpp работать на моей Windows. Я загрузил Rtools, и я изменил путь к

c:\Rtools\bin; c:\Rtools\gcc-4.6.3\bin; c:\Program Files\R\R-3.0.2\bin\x64; [другие]

Затем я взял очень простой файл c++ (new.cpp), который выглядит следующим образом

include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int timesTwo(int x) {
return x * 2;
}

Затем я перехожу на Powershell и, как было предложено для интеграции R и c++ с помощью Rcpp, D. Eddelbuettel (глава 2). Я пытаюсь скомпилировать код

PS C:\Users\RXD308\pgmcpp> PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags()''\ PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''\ RCMD SHLIB new.cpp

Получение ошибки

An expression was expected after '('.
At line:1 char:43
+ PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags( <<<< )''\ PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''\ RCMD SHLIB new.cpp
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression

Две последние вещи

  • У меня есть MinGW и работаю на моем компьютере (g++ 4.6)

  • Я думаю, что у меня есть большая проблема с командой R в powershell. В фактах, когда я обращаюсь к powershell, и я набираю "R --version", я получаю эту ошибку

    Invoke-History : Cannot locate history for commandline --version.
    At line:1 char:2
    + R <<<<  --version
    + CategoryInfo          : ObjectNotFound: (--version:String) [Invoke-History],     ArgumentException
    + FullyQualifiedErrorId : InvokeHistoryNoHistoryForCommandline,Microsoft.PowerShell.Commands.InvokeHistoryCommand
    
Теги:
powershell
rcpp

1 ответ

2

Это ошибка оболочки:

PKG_CXXFLAGS='Rscript -e 'Rcpp:::CxxFlags()''
PKG_LIBS='Rscript -e 'Rcpp:::LdFlags()''
RCMD SHLIB new.cpp

поскольку у вас есть одиночные тики внутри отдельных тиков. Посмотрите более внимательно на стр. 24 и посмотрите разницу между обращенными назад тиками и обращенными вперед клещами. Назад подразумевает выполнение.

При этом вы можете избежать этого второго уровня косвенности, просто выполнив что-то вроде Rcpp::LdFlags() в своем сеансе R и просто скопируйте полученную строку в Makevars.

Это поможет вам скомпилировать ваш код, который является первым порядком ведения бизнеса.

Для создания дистрибутивных макияжей вы можете более внимательно изучить опубликованные решения.

Изменение: убедитесь, что вы можете ходить до запуска. Начните с чего-то вроде этого

C:\>R CMD config CXXFLAGS
-O2 -Wall -mtune=core2

C:\>

а затем перейти к Rscript вызывающему функции Rcpp, как показано. Возможно, у вас есть проблемы с powershell; Я просто сделал это в cmd.exe.

  • 0
    Исправлены галочки, но все еще появляется ошибка. Термин «PKG_CXXFLAGS = Rscript» не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку. В строке: 1 символ: 22 + PKG_CXXFLAGS = Rscript <<<< -e 'Rcpp:::CxxFlags()' \ PKG_LIBS = Rscript -e 'Rcpp:::LdFlags()' \ RCMD SHLIB new.cpp + CategoryInfo: ObjectNotFound: (PKG_CXXFLAGS = Rscript: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
  • 0
    Кажется, что многие проблемы были вызваны PowerShell. Фактически мне удалось запустить конфигурацию R CMD CXXFLAGS -O2 -Wall -mtune = core2 Но снова записать строку PKG_CXXFLAGS = 'Rscript -e' Rcpp ::: CxxFlags () '' \ PKG_LIBS = 'Rscript -e и т. Д. кажется, что PKG_CXXFLAGS не распознается как команда. Подходит ли команда, которую я использую, для синтаксиса Windows?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню