Я быстро интегрировал RInside и Veins (версия 5 alpha 1) и могу сообщить об успехе.
Я установил RInside, запустив R и выполнив install.packages('RInside')
.
Затем я исправил следующие строки (в основном скопированные из примеров GNUMakefile из RInside) в файл Veins src/makefrag
:
# determine flags for RInside
R_HOME := $(shell R RHOME)
RCPPFLAGS := $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS := $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS := $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK := $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)
RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RCPPLIBS := $(shell echo 'Rcpp:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDEINCL := $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS := $(shell echo 'RInside:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
# feed to opp_makemake
DEFINES += $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R CMD config CPPFLAGS) $(shell $(R_HOME)/bin/R CMD config CXXFLAGS)
LIBS += $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS)
После этого я мог использовать R внутри Вен. Я попробовал это, скопировав код из RInside rinside_sample0.cpp
в Veins BaseConnectionManager.cc
следующим образом:
diff --git a/src/veins/base/connectionManager/BaseConnectionManager.cc b/src/veins/base/connectionManager/BaseConnectionManager.cc
index 879e90d244..8e9eba10e8 100644
--- a/src/veins/base/connectionManager/BaseConnectionManager.cc
+++ b/src/veins/base/connectionManager/BaseConnectionManager.cc
@@ -1,3 +1,5 @@
+#include <RInside.h>
+
#include "veins/base/connectionManager/BaseConnectionManager.h"
#include "veins/base/connectionManager/NicEntryDebug.h"
@@ -42,6 +44,12 @@ void BaseConnectionManager::initialize(int stage)
// BaseModule::initialize(stage);
if (stage == 0) {
+
+ // Hello R!
+ RInside R;
+ R["txt"] = "Hello, world!\n";
+ R.parseEvalQ("cat(txt)");
+
drawMIR = hasPar("drawMaxIntfDist") ? par("drawMaxIntfDist").boolValue() : false;
EV_TRACE << "initializing BaseConnectionManager\n";
Компиляция вен (./configure
с последующим make
) и запуск учебного примера (cd examples/veins
с последующим ./run -u Cmdenv
) дали желаемый результат:
OMNeT++ Discrete Event Simulation (C) 1992-2018 Andras Varga, OpenSim Ltd.
Version: 5.4.1, build: 180629-5e28390, edition: Academic Public License -- NOT FOR COMMERCIAL USE
See the license for distribution terms and warranty disclaimer
Setting up Cmdenv...
Loading NED files from ../../src/veins: 41
Loading NED files from .: 1
Loading NED files from /Users/sommer/src/veins/examples/veins: 1
Preparing for running configuration General, run #0...
Assigned runID=General-0-20190308-18:16:24-23603
Setting up network "RSUExampleScenario"...
Initializing...
Hello, world!
Running simulation...
(Обратите внимание на вывод Hello, world!
во время инициализации симуляции.)
Сборка на Windows, скорее всего, будет означать копирование строк из примера файла Makefile.win с примерами RInside.