[Rcpp-devel] Fwd: Request for help with compiling Rcpp example

Jian Kang allenhahaha at gmail.com
Fri Oct 14 20:52:38 CEST 2011


| Hi, Dirk,
|
| Sorry to disturb you again.
|
| Actually, I am also very interested in how to call back the R commands in
| 'cxxfunction'. Do you have some examples or tutorial about this?

Please keep questions on the mailing list.

Dirk

|
| Thank you very much.
|
| Best regards,
|
| Kent
|
|
| On Fri, Oct 14, 2011 at 4:39 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
|
|
|     Hi Kent,
|
|     On 14 October 2011 at 16:00, Jian Kang wrote:
|     | Hi, Dirk,
|     |
|     | Sorry for delay.
|     |
|     | I tried to install the R and Rtools again, and run the program
again,
|     then it
|     | works.
|
|     Excellent!
|
|     | But here is some warnings, I am not sure whether this is OK in the
|     future.
|     |
|     | Compilation argument:
|     |  C:/R/Rsoft/bin/i386/R CMD SHLIB file7e446574.cpp 2>
|     | file7e446574.cpp.err.txt
|     | g++ -I"C:/R/Rsoft/include"    -I"C:/R/Rsoft/library/Rcpp/include"

|      -O2
|     | -Wall  -c file7e446574.cpp -o file7e446574.o
|     | g++ -shared -s -static-libgcc -o file7e446574.dll tmp.def
file7e446574.o
|     C:/R/
|     | Rsoft/library/Rcpp/lib/i386/libRcpp.a -LC:/R/Rsoft/bin/i386 -lR
|     | cygwin warning:
|     |   MS-DOS style path detected: C:/R/Rsoft/etc/i386/Makeconf
|     |   Preferred POSIX equivalent is:
/cygdrive/c/R/Rsoft/etc/i386/Makeconf
|     |   CYGWIN environment variable option "nodosfilewarning" turns off
this
|     | warning.
|     |   Consult the user's guide for more details about POSIX paths:
|     |     http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
|
|     That started with more recent Cygwin / MinGW versions.  Google for
this, I
|     think there were tricks to turn it off. This came up on r-help once or
|     twice
|     too.
|
|     But to reiterate: it is just a warning, and it has nothing to do with
Rcpp.
|
|     Dirk
|
|
|     | Thank you very much.
|     |
|     | Best,
|     |
|     | Kent
|     |
|     |
|     | On Thu, Oct 13, 2011 at 6:46 PM, Dirk Eddelbuettel <edd at debian.org>
|     wrote:
|     |
|     |
|     |     On 13 October 2011 at 18:15, Jian Kang wrote:
|     |     | Thanks for your reply.
|     |     |
|     |     | Here is the response of 'Hello World' program:
|     |     |
|     |     | > src='#include <iostream>
|     |     | + using namespace std;
|     |     | + void main()
|     |     | + {
|     |     | + cout << "Hello World!" << endl;
|     |     | + cout << "Welcome to C++ Programming" << endl;
|     |     | + }'
|     |     | >
|     |     | > fx <- cxxfunction(src,plugin = "Rcpp",verbose=T)
|     |
|     |     PBKAC -- wrong call of cxxfunction().  You can see below how the
|     generated
|     |     code does *not* include your actual function.
|     |
|     |     The correct idiom is
|     |
|     |        fx <- cxxfunction(signature(), body=src,plugin =
|     "Rcpp",verbose=TRUE)
|     |
|     |     Dirk
|     |
|     |
|     |     |  >> setting environment variables:
|     |     | PKG_LIBS =  C:/R/Rsoft/library/Rcpp/lib/i386/libRcpp.a
|     |     |
|     |     |  >> LinkingTo : Rcpp
|     |     | CLINK_CPPFLAGS =  -I"C:/R/Rsoft/library/Rcpp/include"
|     |     |
|     |     |  >> Program source :
|     |     |
|     |     |    1 :
|     |     |    2 : // includes from the plugin
|     |     |    3 :
|     |     |    4 : #include <Rcpp.h>
|     |     |    5 :
|     |     |    6 :
|     |     |    7 : #ifndef BEGIN_RCPP
|     |     |    8 : #define BEGIN_RCPP
|     |     |    9 : #endif
|     |     |   10 :
|     |     |   11 : #ifndef END_RCPP
|     |     |   12 : #define END_RCPP
|     |     |   13 : #endif
|     |     |   14 :
|     |     |   15 : using namespace Rcpp;
|     |     |   16 :
|     |     |   17 :
|     |     |   18 : // user includes
|     |     |   19 :
|     |     |   20 :
|     |     |   21 : // declarations
|     |     |   22 : extern "C" {
|     |     |   23 : SEXP file3a1c304e( ) ;
|     |     |   24 : }
|     |     |   25 :
|     |     |   26 : // definition
|     |     |   27 :
|     |     |   28 : SEXP file3a1c304e(  ){
|     |     |   29 : BEGIN_RCPP
|     |     |   30 :
|     |     |   31 : END_RCPP
|     |     |   32 : }
|     |     |   33 :
|     |     |   34 :
|     |     | Compilation argument:
|     |     |  C:/R/Rsoft/bin/i386/R CMD SHLIB file3a1c304e.cpp 2>
|     |     | file3a1c304e.cpp.err.txt
|     |     | g++ -I"C:/R/Rsoft/include"    -I"C:/R/Rsoft/library/Rcpp/
|     include"
|     |      -O2
|     |     | -Wall  -c file3a1c304e.cpp -o file3a1c304e.o
|     |     | g++ -shared -s -static-libgcc -o file3a1c304e.dll tmp.def
|     file3a1c304e.o
|     |     C:/R/
|     |     | Rsoft/library/Rcpp/lib/i386/libRcpp.a -LC:/R/Rsoft/bin/i386
-lR
|     |     | cygwin warning:
|     |     |   MS-DOS style path detected: C:/R/Rsoft/etc/i386/Makeconf
|     |     |   Preferred POSIX equivalent is: /cygdrive/c/R/Rsoft/etc/i386/
|     Makeconf
|     |     |   CYGWIN environment variable option "nodosfilewarning" turns
|     off this
|     |     | warning.
|     |     |   Consult the user's guide for more details about POSIX paths:
|     |     |     http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
|     |     | Error in as.function.default(c(value, if (is.null(bd) ||
is.list
|     (bd))
|     |     list(bd)
|     |     | else bd),  :
|     |     |   invalid formal argument list for "function"
|     |     |
|     |     | Here, I also tried the test by Hadley,
|     |     |
|     |     | _devel()
|     |     | cygwin warning:
|     |     |   MS-DOS style path detected: C:/R/Rsoft/etc/i386/Makeconf
|     |     |   Preferred POSIX equivalent is: /cygdrive/c/R/Rsoft/etc/i386/
|     Makeconf
|     |     |   CYGWIN environment variable option "nodosfilewarning" turns
|     off this
|     |     | warning.
|     |     |   Consult the user's guide for more details about POSIX paths:
|     |     |     http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
|     |     | gcc -I"C:/R/Rsoft/include"    -I"C:/R/Rsoft/library/Rcpp/
|     include"
|     |      -O3
|     |     | -Wall  -std=gnu99 -c foo.c -o foo.o
|     |     | gcc -shared -s -static-libgcc -o foo.dll tmp.def foo.o
C:/R/Rsoft
|     /library
|     |     /Rcpp/
|     |     | lib/i386/libRcpp.a -LC:/R/Rsoft/bin/i386 -lR
|     |     | [1] TRUE
|     |     |
|     |     | Sorry that I don't really get it how to rebuild R packages
from
|     source.
|     |     |
|     |     | Thanks,
|     |     |
|     |     | Kent
|     |     |
|     |     | On Thu, Oct 13, 2011 at 5:11 PM, Hadley Wickham <
hadley at rice.edu>
|     wrote:
|     |     |
|     |     |     > My best guess is that you have not installed the Rtools
|     |     correctly.  Can
|     |     |     you
|     |     |     > compile a simple 'hello, world' example in C or C++?
|      Can you
|     |     rebuild R
|     |     |     > packages from source?
|     |     |
|     |     |     I wrote an function to check that you have a valid R
|     development
|     |     |     environment (with help from Simon Urbanek) for devtools.
|      See code
|     |     |     below - and check with has_devel()
|     |     |
|     |     |     Hadley
|     |     |
|     |     |
|     |     |     has_devel <- function() {
|     |     |      foo_path <- file.path(tempdir(), "foo.c")
|     |     |
|     |     |      cat("void foo(int *bar) { *bar=1; }\n", file = foo_path)
|     |     |      on.exit(unlink(foo_path))
|     |     |
|     |     |      R("CMD SHLIB foo.c", tempdir())
|     |     |      dylib <- file.path(tempdir(), paste("foo",
|     .Platform$dynlib.ext,
|     |     sep=''))
|     |     |      on.exit(unlink(dylib), add = TRUE)
|     |     |
|     |     |      dyn.load(dylib)
|     |     |      on.exit(dyn.unload(dylib), add = TRUE)
|     |     |
|     |     |      stopifnot(do.call(".C", list("foo",0L))[[1]] == 1L)
|     |     |      TRUE
|     |     |     }
|     |     |
|     |     |     R <- function(options, path = tempdir()) {
|     |     |      r_path <- shQuote(file.path(R.home("bin"), "R"))
|     |     |      in_dir(path, system_check(paste(r_path, options)))
|     |     |     }
|     |     |
|     |     |     system_check <- function(cmd) {
|     |     |      res <- system(cmd)
|     |     |      if (res != 0) {
|     |     |        stop("Command failed (", res, ")", call. = FALSE)
|     |     |      }
|     |     |      invisible(TRUE)
|     |     |     }
|     |     |
|     |     |     in_dir <- function(dir, code) {
|     |     |      cur <- getwd()
|     |     |      setwd(dir)
|     |     |      on.exit(setwd(cur))
|     |     |
|     |     |      force(code)
|     |     |     }
|     |     |
|     |     |     --
|     |     |     Assistant Professor / Dobelman Family Junior Chair
|     |     |     Department of Statistics / Rice University
|     |     |     http://had.co.nz/
|     |     |     _______________________________________________
|     |     |     Rcpp-devel mailing list
|     |     |     Rcpp-devel at lists.r-forge.r-project.org
|     |     |     https://lists.r-forge.r-project.org/cgi-bin/mailman/
|     listinfo/
|     |     rcpp-devel
|     |     |
|     |     |
|     |
|     |     --
|     |     "Outside of a dog, a book is a man's best friend. Inside of a
dog,
|     it is
|     |     too
|     |     dark to read." -- Groucho Marx
|     |
|     |
|
|     --
|     "Outside of a dog, a book is a man's best friend. Inside of a dog, it
is
|     too
|     dark to read." -- Groucho Marx
|
|

--
"Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
dark to read." -- Groucho Marx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20111014/96cfbc7b/attachment-0001.htm>


More information about the Rcpp-devel mailing list