Function/file names are hypothetical. Say I have written myfunction.R, which calls myfunction.c via .C("myfunction", ...). I've compiled successfully myfunction.c via R CMD SHLIB myfunction.c in the terminal. Then, in the R console: dyn.load("myfunction.so") source("myfunction.R") test <- myfunction() # works fine So everything is in order, myfunction works perfectly. Now I want to include myfunction() into a package called mypackage. Here's what I did: 1) I've added PACKAGE = "mypackage" in the .C() line in myfunction.R. 2) I put myfunction.R into the R folder of mypackage 3) I put myfunction.c into the src folder of mypackage 4) I created myfunction.Rd into the man folder I then build the package via R CMD build mypackage. All good. However, when I run R CMD check mypackage, I get the following error (note that I translated from french, might be a bit different in english): Error in .C("myfunction", ...): C symbol name "myfunction" cannot be found in the DLL for package "mypackage" I would appreciate some help here. Please do not refer my to "Writing R extensions" - if the answer's in there, I don't understand it. Many thanks. -- Etienne Lalibert? ===============================Rural Ecology Research Group School of Forestry University of Canterbury Private Bag 4800 Christchurch 8140, New Zealand Phone: +64 3 366 7001 ext. 8365 Fax: +64 3 364 2124 www.elaliberte.info
Etienne Lalibert? wrote:> Function/file names are hypothetical. Say I have written myfunction.R, > which calls myfunction.c via .C("myfunction", ...). > > I've compiled successfully myfunction.c via R CMD SHLIB myfunction.c > in the terminal. Then, in the R console: > > dyn.load("myfunction.so") > source("myfunction.R") > test <- myfunction() # works fine > > So everything is in order, myfunction works perfectly. > > Now I want to include myfunction() into a package called mypackage. > Here's what I did: > > 1) I've added PACKAGE = "mypackage" in the .C() line in myfunction.R. > 2) I put myfunction.R into the R folder of mypackage > 3) I put myfunction.c into the src folder of mypackage > 4) I created myfunction.Rd into the man folder > > I then build the package via R CMD build mypackage. All good. However, > when I run R CMD check mypackage, I get the following error (note that > I translated from french, might be a bit different in english): > > Error in .C("myfunction", ...): C symbol name "myfunction" cannot be > found in the DLL for package "mypackage" > > I would appreciate some help here. Please do not refer my to "Writing > R extensions" - if the answer's in there, I don't understand it. >What do you get from R CMD INSTALL mypackage? Duncan Murdoch> Many thanks. > > -- > Etienne Lalibert? > ===============================> Rural Ecology Research Group > School of Forestry > University of Canterbury > Private Bag 4800 > Christchurch 8140, New Zealand > Phone: +64 3 366 7001 ext. 8365 > Fax: +64 3 364 2124 > www.elaliberte.info > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
Dear Etienne, You probably want to create a zzz.R file in the /mypkg/R/ folder which is just .First.lib <- function(lib, pkg){ library.dynam("MyPkgName", package = pkg, lib.loc = lib) return(invisible(0)) } This would ensure that your shared library will be loaded. Best, Mathieu Le lundi 26 octobre 2009 ? 03:58 +0100, Etienne Lalibert? a ?crit :> Function/file names are hypothetical. Say I have written myfunction.R, > which calls myfunction.c via .C("myfunction", ...). > > I've compiled successfully myfunction.c via R CMD SHLIB myfunction.c > in the terminal. Then, in the R console: > > dyn.load("myfunction.so") > source("myfunction.R") > test <- myfunction() # works fine > > So everything is in order, myfunction works perfectly. > > Now I want to include myfunction() into a package called mypackage. > Here's what I did: > > 1) I've added PACKAGE = "mypackage" in the .C() line in myfunction.R. > 2) I put myfunction.R into the R folder of mypackage > 3) I put myfunction.c into the src folder of mypackage > 4) I created myfunction.Rd into the man folder > > I then build the package via R CMD build mypackage. All good. However, > when I run R CMD check mypackage, I get the following error (note that > I translated from french, might be a bit different in english): > > Error in .C("myfunction", ...): C symbol name "myfunction" cannot be > found in the DLL for package "mypackage" > > I would appreciate some help here. Please do not refer my to "Writing > R extensions" - if the answer's in there, I don't understand it. > > Many thanks. > > -- > Etienne Lalibert? > ===============================> Rural Ecology Research Group > School of Forestry > University of Canterbury > Private Bag 4800 > Christchurch 8140, New Zealand > Phone: +64 3 366 7001 ext. 8365 > Fax: +64 3 364 2124 > www.elaliberte.info > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Institute of Mathematics Ecole Polytechnique F?d?rale de Lausanne STAT-IMA-FSB-EPFL, Station 8 CH-1015 Lausanne Switzerland http://stat.epfl.ch/ Tel: + 41 (0)21 693 7907