Неопределенная ошибка ссылки при связывании с библиотеками R и RInside из кода C++ с использованием компилятора g++ в UNIX

Я хочу встроить R в программу на C++. Поэтому я также установил R, Rcpp и RInside. Но я получаю много ошибок "undefined reference to" при компиляции с помощью g++ в UNIX. Команда, которую я даю для компиляции,

g++ -I/путь/к/R/include -I/путь/к/Rcpp/include -I/путь/к/RInside/include -L/путь/к/R/libs -L/путь/к/Rcpp/ libs -L/путь/к/RInside/libs test.cpp -lRlapack -lRcpp -lRblas -lRInside"

test.cpp:

#include <RInside.h>                   
int main(int argc, char *argv[]) {
    RInside R(argc, argv);              // create an embedded R instance
    R["txt"] = "Hello, world!\n";   // assign a char* (string) to 'txt'
    R.parseEvalQ("cat(txt)");           // eval the init string, ignoring any returns
    exit(0);
}

Ошибки:

Undefined reference to R_ClassSymbol
Undefined reference to R_NilValue

Я получаю аналогичные 110 неопределенных ошибок для переменных R. Я установил R и другие пакеты в свое собственное местоположение, а не в местоположение по умолчанию. Я застрял с этой ошибкой уже 2 дня. Кажется, я все делаю правильно, например, связываю и т. Д. Заранее спасибо.


person Manoj    schedule 13.01.2011    source источник


Ответы (3)


RInside содержит более десяти примеров в каталоге examples/standard/ (и еще несколько примеров для MPI, которые вы можете игнорировать пока). Попробуйте создать их и попробуйте адаптировать их Makefile.

Ваше сообщение об ошибке ссылки указывает на отсутствующие символы из R - и в команде, которую вы показываете, отсутствует часть -lR. Попробуйте добавить это, используя (рабочие) примеры в качестве руководства.

person Dirk Eddelbuettel    schedule 13.01.2011
comment
Приведенный выше код взят из этого каталога. Это простая программа «hello world». Каталог lib R содержит libRlapack.so и libRblas.so. Вот почему я дал -lRlapack и -lRblas. В дереве нет файла libR. - person Manoj; 13.01.2011
comment
Откуда вы взяли Р? Сам R должен быть собран с параметром --enable-R-shlib. - person Dirk Eddelbuettel; 13.01.2011
comment
Взял с сайта CRAN. Я не устанавливал его с опцией --enable-R-shlib. Я сделал простой ./configure, а затем make, make install. Попробую и с этим вариантом - person Manoj; 13.01.2011
comment
Если вы используете Ubuntu или Debian, попробуйте готовые пакеты R, доступные в CRAN. - person Dirk Eddelbuettel; 13.01.2011
comment
Готовые пакеты R? Не видел этого на их веб-сайте. Установлю все заново. Я на RHEL. - person Manoj; 13.01.2011
comment
Снова все установил. Теперь получаю предупреждение о том, что libgfortran.so.1, требуемый libR.so, недоступен. Затем появляется еще несколько неопределенных ошибок. Думаю, мне нужно установить libgfortran.so сейчас. - person Manoj; 14.01.2011
comment
Вы можете проконсультироваться с некоторыми пользователями R on RH/FC. Разве нет списка r-sig? Все это просто работает в Ubuntu и Debian... - person Dirk Eddelbuettel; 15.01.2011

(Обновлено после того, как код был введен правильно, чтобы я мог его прочитать!)

См. http://dirk.eddelbuettel.com/code/rinside.html для некоторых полезных Примеры.

person EmeryBerger    schedule 13.01.2011
comment
Простите за это. Я снова разместил вопрос в правильном формате - person Manoj; 13.01.2011

Наконец-то получил это .... Установил все заново с помощью -enable-R-shlib в другой системе. Пример работает нормально. Теперь я смогу приступить к некоторым реализациям. Спасибо.

person Manoj    schedule 17.01.2011