Я пытаюсь вызвать R из c ++ в Linux через RInside, я скомпилировал R-2.15.1 из исходного кода с gcc версии 4.5.3 (Debian 4.5.3-1), у меня нет прав sudo для использования apt-get установить. Я использую OpenBlas и оптимизированную систему Lapack. Библиотеки blas и lapack прекрасно работают для многих приложений скальпинга
Я установил R с
./configure --with-blas="-I/lib/OpenBLAS-v0.2.3-0/xianyi-OpenBLAS-48f075c/install/include -L/lib/OpenBLAS-v0.2.3-0/xianyi-OpenBLAS-48f075c/install/lib -lopenblas -lgfortran" --with-lapack="/usr/lib/liblapack.so -lgfortran" --enable-BLAS-shlib=yes --enable-R-shlib --enable-R-static-lib --prefix= .
который установлен и работает нормально, я запустил make check без ошибок, также все пакеты (Rcpp и RInside) установлены нормально ..
Однако, когда я использую данный RInside makefile
, основной пример Привет из мира /standard/rinside_sample0.cpp
компилирует! но он не запускается, и я получаю следующую ошибку
./rinside_sample0: error while loading shared libraries: libRblas.so: cannot open shared object file: No such file or directory
файл libRblas.so
существует и находится в R/lib
папка,
когда я пытаюсь связать его вручную с помощью команды g ++, создает файл make или связывает его следующим образом, я получаю ошибку сегментации
/R/lib/libRblas.so ./hello_world
Segmentation fault
РЕДАКТИРОВАТЬ: вот как пример файла make пытается скомпилировать пример (который прекрасно компилируется), но не будет работать с отсутствующим выше libRblas.so
ошибка
g++ -I/nfs/user03/jimmie21/libs/lib64/R/include -I/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/include -I/nfs/user03/jimmie21/libs/lib64/R/library/RInside/include -g -O2 -Wall -I/usr/local/include hello_world.cpp -L/nfs/user03/jimmie21/libs/lib64/R/lib -lR -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRblas -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRlapack -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRblas -L/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/lib -lRcpp -Wl,-rpath,/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/lib -L/nfs/user03/jimmie21/libs/lib64/R/library/RInside/lib -lRInside -Wl,-rpath,/nfs/user03/jimmie21/libs/lib64/R/library/RInside/lib -o hello_world
Пара вещей:
Воспроизводимые примеры, пожалуйста
У вас нестандартная настройка
С помощью скрипта из 1), попробуйте его в стандартной настройке, так как именно так Rcpp / RInside разрабатывается и тестируется (в Ubuntu / Debian)
Набор тестов Rcpp теперь содержит почти 800 модульных тестов из 350 функций модульных тестов. Это не seg.fault, так что проблема в вашем конце. Точно так же RInside имеет десятки примеров в четырех examples/
подкаталоги. Это тоже работает.
Это может быть так же просто, как настроить файлы Makefile / Makevars, чтобы убедиться, что вы получаете свои библиотеки во всех случаях. Но мы не можем сказать, так как здесь нет ничего воспроизводимого.
редактировать Если вы хотите связаться с libRblas.so
тогда у вас есть полностью нестандартная настройка в качестве пакетов R для Debian / Ubuntu, так как используется внешний BLAS. Опять же, не проблема RInside.
Я исправил проблему, добавив R путь установки lib ../R/lib:
к началу LD_LIBRARY_PATH
после этого все примеры скомпилированы и работают нормально