Rcpp or plain C++ or even C ;) , you still have to declare used functions.
In Rcpp package, the most natural way to do it, is to put such
declarations in a file $pkg/inst/include/<pkg_name>.h. In your case, it
will be inst/include/ade4.h
In this file you put:
#include <RcppArmadillo.h>
int matcentrageCpp (arma::mat& A, const arma::vec& poili, const int typ);
and all other functions of yours you plan to use in a cross-file way.
Then, in a file where you want to use such functions (e.g. in
testertracenuCpp.cpp), you add
#include <ade4.h>
Finally, you add the following line in your src/Makevars:
PKG_CPPFLAGS = -I../inst/include
After all this, I've got a compilation without error.
I can make a PR if you wish.
Best,
Serguei.
Le 23/06/2022 à 16:10, Jean Thioulouse a écrit :
Le 23 juin 2022 à 16:04, Serguei Sokol <serguei.so...@gmail.com> a écrit :
Le 23/06/2022 à 15:47, Jean Thioulouse a écrit :
Thank you Serguei, I tried this, but I still get the "undeclared identifier"
error for these internal functions during package compilation:
clang++ -arch arm64 -std=gnu++14
-I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
-I'/Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/library/Rcpp/include'
-I'/Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/library/RcppArmadillo/include'
-I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
testertracenuCpp.cpp -o testertracenuCpp.o
testertracenuCpp.cpp:112:9: error: use of undeclared identifier 'matcentrageCpp'
i = matcentrageCpp (ti1p, pl, typ1);
I cannot find 'matcentrageCpp' in
https://github.com/sdray/ade4/tree/ade4-Rcpp/. Do you have a current state
example somewhere?
Yes, I just pushed it in the ade4-Rcpp branch.
Serguei.
^
Jean
Le 23 juin 2022 à 15:17, Serguei Sokol <serguei.so...@gmail.com> a écrit :
Le 23/06/2022 à 15:02, THIOULOUSE JEAN a écrit :
Hi
Sorry to bother you again with my C/C++ problems in the ade4 package (available on
CRAN & GitHub).
Thanks to your help, I have succeeded in converting several of the C functions
to C++ using Rcpp. Now the package compiles without problem and all my C++
functions run fine in the dedicated GitHub branch of the package (ade4-Rcpp).
The new problem I am facing now is that in ade4, I use a library of about 30
utilities functions collected in one file named adesub.c, with adesub.h headers
file. From what I understand, during package compilation these functions are
added to the ade4 shared library and they can be called by my other C functions
without being declared in the init.c or NAMESPACE files, as they do not need to
be known by R.
I would like to know if it is possible to do the same thing in C++ with Rcpp.
If I understand correctly you goal, just don't put "// [[Rcpp::export]]" before your
"internal" functions. They will be available to all C and C++ functions in src/ but not seen in R.
You don't need extra "R CMD SHLIB" either.
Best,
Serguei.
I have found reading the documentation (Dirk's book and Rcpp vignettes) that I
could use R CMD SHLIB to build a shared library and then dyn.load it in R. I
have created a file named ade4lib.cpp containing the utilities functions in the
src directory, and I can make the shared library (ade4lib.so) with RCMD SHLIB.
But this does not solve my problem because, as I understand it, this makes the
utilities library functions available to R (which is useless since they are not
interfaced correctly to R but to C++), and not to the other C++ functions
(which is what i need to do).
Can anybody see where I am mistaken, and point me to the right direction to
accomplish this ?
Thank you,
Jean
—-
Jean THIOULOUSE -
https://lbbe-web.univ-lyon1.fr/en/annuaires-des-membres/thioulouse-jean
https://orcid.org/0000-0001-7664-0598 (ORCID page)
https://www.springer.com/fr/book/9781493988488 (ade4 Book)
https://pbil.univ-lyon1.fr/JTHome/Biblio/ThioulouseEB2021.pdf (Evol. Biol.
paper)
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel