Вызов функций R из VC ++ - PullRequest
       2

Вызов функций R из VC ++

5 голосов
/ 22 декабря 2011

Мне нужно запустить статистические функции из R в моем коде C ++.Есть ли способ вызвать их из моего кода C ++?Я использую VS 2005, мне нужно включить какие-либо заголовочные файлы или связать какие-либо библиотеки?Я установил R, используя стандартный установщик Windows, предоставленный на их веб-сайте.

С уважением,

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

Коротко:

  • Как было сказано довольно часто, сам R не строится под VS * делает связывание кода C трудным, но возможным и кодом C ++ невозможно (так как информация заголовка функции не стандартизирована).

  • Rcpp и RInside прекрасно работают в Windows, учитывая стандарт Набор инструментов для Windows. (У RInside была ошибка, но теперь она исправлена.)

    В FAQ по Rcpp есть что сказать о VS * (т.е. вы не можете этого ожидать работать, если сам R не может работать с компилятором)

  • Если вы должны использовать VS *, то ваша лучшая ставка может быть слабой связью через сеть и с помощью Rserve.

    Если вы можете переключать компиляторы, тогда Rcpp / RInside может быть интересен; и Остальная часть R API также в вашем распоряжении.

  • Rcpp и др. Имеют обильную документацию, включая PDF-файл с описанием Rcpp (который также рецензируемая статья) и вышеупомянутый Rcpp-FAQ ---, а также специальный список рассылки.

И, пожалуйста, не кросс-пост. Я также только что ответил на это на r-help .

0 голосов
/ 03 августа 2016

Двоичная версия Rserve, предусмотренная в https://rforge.net/Rserve/files/, не собирается в Microsoft Visual C ++.В файле ReadMe.txt автор указывает, что для Windows нет конфигурации, но есть специальный Makefile.win.Нам не удалось его построить, используя "make -f Makefile.win", поскольку файл config.h не предоставляется (только config.h.in).

  1. Итак,закомментируйте следующую строку в заголовочном файле Rsrv.h:


    // # include «config .h»


На этом этапегенерируется следующая ошибка:


rsrv .h (384): фатальная ошибка C1189: # error: "Невозможно определить порядковый номер. Убедитесь, что config .h включен или _ _ {BIG | LITTLE} _ENDIAN__ -определено. "


Решить проблемы, связанные с порядком байтов.В заголовочном файле Rsvr.h заменить:
/* Windows is little-endian is most cases, anywhere else we're stuck*/
 # error "Cannot determine endianness. Make sure config.h is included or  __{BIG|LITTLE}_ENDIAN__ is defined ."
# endif

на:


/********* MODIFICATION *************/

/* # error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." */
/************************************/
#define _BIG_ENDIAN (*(uint16_t *)?\xff? < 0x100)

Убедитесь, что среда сборки ссылается на файл библиотеки Winsock Ws2_32.lib.Для этого добавьте следующие строки кода перед основной функцией:
/* indicate to the linker that the Ws2_32.lib file is needed */
#pragma comment(lib, "Ws2_32.lib") 

Приложения, использующие Winsock, должны быть связаны с библиотечным файлом Ws2_32.lib.

Для получения более подробной информации об интеграции R и Microsoft Visual C ++ через Rserve посетите https://www.researchgate.net/publication/305789407_Rserve_for_Windows_case_of_R_and_Microsoft_Visual_C_integration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...