L’exemple RInside s’exécutait et fonctionnait, mais je devais append manuellement l’éditeur de liens: “-F / Bibliothèque / Frameworks / R.framework / .. -framework R” à la fin pour g ++ (sous Mac Snow Leopard 10.6.8 avec Xcode 3.x). Cela fonctionne, mais je ne sais pas pourquoi. Quelqu’un peut-il dire ce que font réellement ces options? Je ne pouvais pas le trouver sur cette liste: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
Voici le code original:
#include // for the embedded R via RInside int main(int argc, char *argv[]) { RInside R(argc, argv); // create an embedded R instance R["txt"] = "Hello, world!\n"; // assign a char* (ssortingng) to 'txt' R.parseEvalQ("cat(txt)"); // eval the init ssortingng, ignoring any returns exit(0); }
Voici l’appel de l’éditeur de liens tel que je l’ai vu dans NetBeans:
g ++ -o dist / Debug / GNU-MacOSX / vocation de construction / Debug / GNU-MacOSX / main.o – L / Bibliothèque / Frameworks / R.framework / Ressources / lib -L / Bibliothèque / Frameworks / R.framework / Ressources / bibliothèque / Rcpp / lib -L / Bibliothèque / Frameworks / R.framework / Ressources / library / RInside / lib -L / Bibliothèque / Frameworks / R.framework / Bibliothèques -L / Bibliothèque / Frameworks / R.framework / Resources / lib – L / Bibliothèque / Frameworks / R.framework / Ressources / library-L / Bibliothèque / Frameworks / R.framework / Ressources / modules -lRcpp -lRInside -lRlapack -lRblas -F / Bibliothèque / Frameworks / R.framework / .. -framework R
La dernière partie est ce que je devais append manuellement. Sans cela, j’ai eu deux erreurs de couplage:
Undefined symbols: "_Rf_mkSsortingng", referenced from: Rcpp::wrap(char const*)in main.o "_R_NilValue", referenced from: Rcpp::wrap(char const*)in main.o
Les frameworks sont, plus ou moins, une manière de comstackr des applications sur Mac. Ces applications peuvent contenir le code + les en-têtes + les bibliothèques que nous voulons utiliser. La ligne
-F/Library/Frameworks/R.framework/..
“Rechercher dans le dossier /Library/Frameworks
les structures spécifiées”, et
-framework R
dit: “cherchez le dossier R.framework
dans l’ensemble des répertoires ‘frameworks'”.
Notez que l’argument -framework R
est en fait géré par ld
, pas par gcc
/ clang
, vous trouverez donc plus d’informations dans man ld
. L’argument -F
, en revanche, est géré par gcc
/ clang
. Ensemble, ils permettent à votre compilateur et à votre éditeur de trouver les en-têtes et les bibliothèques nécessaires.
En particulier, sur Mac, ils se trouvent (par défaut) sous les /Library/Frameworks/R.framework/Headers
et /Library/Frameworks/R.framework/Libraries
– ce sont les répertoires explorés en définissant les indicateurs de structure appropriés.
Plus d’informations sont disponibles ici pour l’ argument -F et pour l’ argument -framework .
RInside nécessite R car il intègre R.
C’est pourquoi vous obtenez des erreurs d’éditeur de liens sur les identificateurs de base R manquants quand il n’est pas présent.
Maintenant, je ne sais pas pourquoi ces instructions de lien étaient absentes. Notre Makefile
dans le répertoire examples/standard
(d’où provient ce premier exemple) utilise
LDLIBS := $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS)
et toutes ces variables sont définies dans le Makefile
lui-même. Celui-ci est
RLDFLAGS := $(shell $(R_HOME)/bin/R CMD config --ldflags)
et cela aurait dû inclure R et sa bibliothèque.