Я посмотрел несколько мест, но не смог найти простой пример для моей проблемы.
Мне нужно иметь возможность использовать несколько файлов .so, которые у меня есть (вместе с файлами .h).
Простой пример:
У меня есть следующие файлы: ах, a.cpp функция jeden - это моя библиотека R, accessor.cpp, которая предоставляет R функцию dwa извнешняя библиотека libdwa.so.У меня есть заголовочный файл dwa.h и эта библиотека libdwa.so.
Я могу управлять сборкой двоичного пакета (и все работает нормально) только и только тогда, когда я помещаю библиотечный файл libdwa.so в каталог '/ usr / lib '(я использую Debian).Но это не совместимое решение.
Где я должен поместить файлы библиотеки "dwa" (dwa.h и libdwa.so) и какие флаги добавить в файл Makevars, чтобы получить переносимое решение?
РЕЗЮМЕ ДОБАВЛЕНО
Я суммирую свои результаты здесь.Я полагаю, что некоторые чрезвычайно простые примеры полезны при запуске.
2 внешние библиотеки, помещенные в inst :
/inst/include/dwa.h
/inst/include/trzy.h
/inst/jeden/libdwa.so
/inst/jeden/libtrzy.so
Настройка Файл / Настройка имеет форму (test6 - это имя пакета):
#!/bin/bash
rpath=$(${R_HOME}/bin/Rscript -e 'cat(file.path(.libPaths()[1], "test6", "jeden"))') #'
sed -e"s|@rpath@|"${rpath}"|" src/Makevars.in > src/Makevars
exit 0
Файл /src/Makevars.in имеет вид:
CXX_STD = CXX11
PKG_CPPFLAGS = -I../inst/include/ -I.
PKG_LIBS = -ldwa -ltrzy -L../inst/jeden -Wl,-rpath,@rpath@
/ src / accessor.cpp предоставляет функции библиотек R:
#include <Rcpp.h>
#include "../inst/include/dwa.h"
#include "../inst/include/trzy.h"
// [[Rcpp::export]]
Rcpp::String r_dwa() {
Rcpp::String res = dwa();.
return res;
}
// [[Rcpp::export]]
Rcpp::String r_trzy() {
Rcpp::String res = trzy();.
return res;
}
Библиотека Pure R также существует / / src / hello_world.cpp_:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
String hello_world() {
String hw = "Hello World";
return hw ;
}
Окончательно / NAMESPACE файл:
useDynLib("test6", .registration=TRUE)
import("Rcpp")
importFrom("utils", "object.size", "packageVersion")
exportPattern("^[[:alpha:]]+")
Сборка исходных и двоичных пакетов прошла успешно, но только исходных один полезен в качестве двоичный файл имеет путь к библиотекам, написанным жестко.