компиляция броненосца с помощью Rtools/MinGW

Я тщетно пытаюсь скомпилировать библиотеку линейной алгебры броненосца для windows. Используя исходный код armadillo-4.200.0, у меня установлен Rtools-3.1, а в пути установлен msys из MinGW.

Поскольку моей конечной целью является использование Rcpp и RcppArmadillo, я думаю, что мне нужно использовать тот же компилятор для создания броненосца, который будет использоваться для компиляции моих файлов Rcpp/RcppArmadillo. К сожалению, при попытке скомпилировать броненосец:

$ ./configure
[...snip...]
-- The CXX compiler identification is unknown
-- Check for working CXX compiler: cl
CMake Warning at CMakeLists.txt:3 (PROJECT):
  To use the NMake generator, cmake must be run from a shell that can use the
  compiler cl from the command line.  This environment does not contain
  INCLUDE, LIB, or LIBPATH, and these must be set for the cl compiler to
  work.

CMake Error: your CXX compiler: "cl" was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
[...snip...]

(Я безуспешно пытался установить CMAKE_CXX_COMPILER в свой Rtools gcc.exe.)

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

Либо:

  1. Есть ли проблема с компиляцией библиотеки броненосца и последующего кода Rcpp разными версиями компилятора? (Rtools-3.1 имеет версию gcc 4.6.3, MinGW имеет версию gcc 4.8.1.)

  2. Есть ли чистый метод компиляции броненосца только с коллекцией Rtools?

(Win7 x64, R-3.1.0, cygwin gcc 4.8.2, rtools 3.1 с gcc 4.6.3.)


person r2evans    schedule 30.04.2014    source источник


Ответы (1)


RcppArmadillo поставляет собственную копию Armadillo именно для того, чтобы избежать этой проблемы. Поскольку RcppArmadillpo используется из R, он может полагаться на R (и конфигурацию R) для получения LAPACK, BLAS и т. д. Нам не нужно запускать configure для использования Armadillo из R, поэтому мы этого не делаем.

RcppArmadillo устанавливается обычным R CMD INSTALL ... способом; это проверяется перед каждым выпуском и работает надежно.

Когда вы говорите "ваша конечная цель — использовать Rcpp и RcppArmadillo", вы на самом деле закончили R CMD INSTALL .... Вы можете воспроизвести этот шаг из исходного кода и протестировать пакет — все это должно «просто работать».

Еще одна вещь, о которой следует помнить, это то, что говорится о вашем компиляторе в руководствах «Написание расширений R» и «Установка и администрирование R». Что касается R, то вашего g++ 4.8.* не существует. Имеет значение только версия Rtools, иначе вы очень быстро попадете в нестандартную страну.

person Dirk Eddelbuettel    schedule 30.04.2014
comment
Ах, дерьмо. По какой-то причине я думал, что перед установкой RcppArmadillo мне придется самому скомпилировать броненосца. Я так старался RTM, прежде чем опубликовать это тоже ... Спасибо, Дирк, и за ответ, и за Rcpp*. - person r2evans; 30.04.2014
comment
Нет mas -- если вы думаете о месте, где мы должны сказать это более четко, за пределами файла DESCRIPTION, в котором уже сказано: Пакет RcppArmadillo включает файлы заголовков из шаблонной библиотеки Armadillo. Таким образом, пользователям не нужно устанавливать сам Armadillo, чтобы использовать RcppArmadillo. сообщите нам об этом. - person Dirk Eddelbuettel; 30.04.2014
comment
Хе-хе, приятно (мягко, но заслуженно) покопаться :-) Я обычно (неверно) интерпретирую заголовки как означающие *.h, а не библиотеку, поэтому, возможно, мне нужно обновить свой внутренний глоссарий. (Для меня это сделало бы словосочетание ... включает библиотеку и заголовочные файлы из..., но это всего лишь мой умвельт.) - person r2evans; 30.04.2014
comment
Ну, вот и ключ: в RcppArmadillo нет библиотеки. Мы используем его не так, как Armadillo - это то, что я пытался понять в моем ответе выше. Следовательно, пакет представляет собой просто шаблонные заголовки, которые в своем гиковском коде тоже говорят, что нет библиотеки. Сделайте сборку RcppArmadillo с помощью пакета, и вы нигде не увидите libArmadillo, так как он не используется. Просто шаблоны. - person Dirk Eddelbuettel; 30.04.2014
comment
Вероятный источник моей неверной интерпретации: из Arma: Armadillo — это библиотека линейной алгебры C++... . Я уже сделал быстрое сканирование и нашел .dll в libs, но теперь вижу, что это твое, а не Конрада. Теперь перейдем к адаптации моей модели из 4D к чему-то более приятному. (Ничего похожего на матрицы 10D, которые я видел в ваших комментариях в другом месте.) - person r2evans; 30.04.2014
comment
Да, и еще раз побить эту дохлую лошадь: Armadillo — это библиотека, RcppArmadillo — нет. - person Dirk Eddelbuettel; 30.04.2014
comment
О, и да, в пакете все еще есть небольшая библиотека, потому что он содержит небольшой пример кода. Но это тоже генерируется R CMD INSTALL .... - person Dirk Eddelbuettel; 30.04.2014