[Rcpp-devel] Rcpp_0.9.0.tar.gz does not build on FreeBSD

Rainer Hurling rhurlin at gwdg.de
Tue Jan 4 19:10:31 CET 2011


On 04.01.2011 18:58 (UTC+1), Dirk Eddelbuettel wrote:
> On 4 January 2011 at 18:24, Rainer Hurling wrote:
> | On 04.01.2011 14:04 (UTC+1), Dirk Eddelbuettel wrote:
> |>  On 4 January 2011 at 12:02, Rainer Hurling wrote:
> |>  | On 03.01.2011 13:20 (UTC+1), Dirk Eddelbuettel wrote:
> |>  |>   Rainer,
> |>  |>
> |>  |>   Please use the rcpp-devel list for questions. You need to subscribe to post,
> |>  |>   or you can use a web-to-list interface to gmane.org.
> |>  |
> |>  | Done. Hope it is ok to pursue the private thread on the list.
> |>
> |>  That's perfect.
> |>
> |>  |>   | It seems that 'src/Makevars' is not fully compatible to FreeBSD style
> |>  |>
> |>  |>   Hm. Can you try enforcing GNU make via something like
> |>  |>
> |>  |>           export MAKE=/usr/bin/gmake
> |>  |
> |>  | Thanks for the tip. With gmake it proceeds build and installing. But
> |>
> |>  Good. We are actually trying to not depend on GNU make so you found an
> |>  infelicity which I may correct by ...
> |
> | Nice.
>
> That is now taken care of in SVN.

Wow, that is fast.

> |>  | there is another problem with testing the installation, see below please.
> |>  |
> |>  |>   (or whererever it it stored on your system). At that point the implicit
> |>  |>   variable $^ is used:
> |>  |>
> |>  |>   		$(SHLIB_CXXLD) -o $(USERLIB) $^ $(SHLIB_CXXLDFLAGS) $(ALL_LIBS)
> |>  |>
> |>  |>   Here $^ expands to the list of all prerequisites, so you could try $OBJECTS
> |>  |>   in its place.
> |>  |
> |>  | gmake is able to use $^, so there is no need for me to use $OBJECTS  :-)
> |>
> |>  ... switching to $OBJECT in place of $^ here.
> |>
> |>  | As mentioned above build and install are successfull. But testing if
> |>  | installed package can be loaded fails:
> |>  |
> |>  | -------------------------------------------
> |>  | [..SNIP..]
> |>  | g++ -shared -L/usr/local/lib -o Rcpp.so Date.o DateVector.o Datetime.o
> |>  | DatetimeVector.o Dimension.o DottedPair.o Environment.o Evaluator.o
> |>  | Formula.o Function.o Language.o Module.o Pairlist.o Promise.o RObject.o
> |>  | RcppCommon.o Rcpp_init.o Reference.o S4.o Symbol.o WeakReference.o
> |>  | barrier.o cache.o coerce.o complex.o debugging.o exceptions.o posixt.o
> |>  | r_cast.o
> |>
> |>  This line should have   -L/usr/lib64/R/lib -lR   at the end.
> |
> | There is no /usr/lib64/R/lib on FreeBSD, instead it is located under
> | /usr/local/lib/R/lib.
> |
> |>  Odd. Is your R version built as a shared library?
> |
> | I think so but I am not sure. Is there any quick test?
>
> Yes. Look if your /usr/local/lib/R/lib contains what on my system is called libR.so.
> I suspect it doesn't.

You are right. There are only libRblas.so and libRlapack.so.

> Did you build your own binary?  Did you use '--enable-R-shlib' ?

Yes, own binary build. No, my configure is like

./configure --with-blas="-lf77blas -latlas" --with-lapack="-lalapack 
-lcblas" --with-system-pcre --enable-threads=posix

> This isn't needed for Rcpp but definitely needed for things like RInside or
> other embedded uses of R.  It also makes everything linking with R a lot
> smaller.
>
> |>  | g++ -o libRcpp.so Date.o DateVector.o Datetime.o DatetimeVector.o
> |>  | Dimension.o DottedPair.o Environment.o Evaluator.o Formula.o Function.o
> |>  | Language.o Module.o Pairlist.o Promise.o RObject.o RcppCommon.o
> |>  | Rcpp_init.o Reference.o S4.o Symbol.o WeakReference.o barrier.o cache.o
> |>  | coerce.o complex.o debugging.o exceptions.o posixt.o r_cast.o -shared
> |>
> |>  Dito here.
> |>
> |>  | ar qc libRcpp.a Date.o DateVector.o Datetime.o DatetimeVector.o
> |>  | Dimension.o DottedPair.o Environment.o Evaluator.o Formula.o Function.o
> |>  | Language.o Module.o Pairlist.o Promise.o RObject.o RcppCommon.o
> |>  | Rcpp_init.o Reference.o S4.o Symbol.o WeakReference.o barrier.o cache.o
> |>  | coerce.o complex.o debugging.o exceptions.o posixt.o r_cast.o
> |>  | cp libRcpp.so ../inst/lib
> |>  | cp libRcpp.a ../inst/lib
> |>  | rm libRcpp.so libRcpp.a
> |>  | installiert nach /usr/local/lib/R/library/Rcpp/libs
> |>  | ** R
> |>  | ** inst
> |>  | ** preparing package for lazy loading
> |>  | ** help
> |>  | *** installing help indices
> |>  | ** building package indices ...
> |>  | ** testing if installed package can be loaded
> |>  | Error in dyn.load(file, DLLpath = DLLpath, ...) :
> |>  |    kann shared object '/usr/local/lib/R/library/Rcpp/libs/Rcpp.so' nicht
> |>  | laden:
> |>  |    /usr/local/lib/R/library/Rcpp/libs/Rcpp.so: Undefined symbol
> |>  | "backtrace_symbols"
> |>  | Fehler: loading failed
> |>  | * removing '/usr/local/lib/R/library/Rcpp'
> |>  | -------------------------------------------
> |>  |
> |>  | I do not understand why 'backtrace_symbols' is undefined. In
> |>  | 'src/debugging.cpp' all seems to be ok?
> |>
> |>  No, it is a system library function we use. From 'man backtrace_symbol' :
> |
> | Ok, I see. I will answer some more about backtrace_symbol in my next
> | posting ...
> |
> |>  BACKTRACE(3)                      Linux Programmer's Manual                     BACKTRACE(3)
> |>
> |>  NAME
> |>          backtrace,  backtrace_symbols,  backtrace_symbols_fd  - support for application self-
> |>          debugging
> |>
> |>  SYNOPSIS
> |>          #include<execinfo.h>
> |>
> |>          int backtrace(void **buffer, int size);
> |>
> |>          char **backtrace_symbols(void *const *buffer, int size);
> |>
> |>          void backtrace_symbols_fd(void *const *buffer, int size, int fd);
> |>  [...]
> |>
> |>  | I tried to comment out the complete part between '#if defined(__GNUC__)'
> |>  | and '#endif' and use only
> |>  |
> |>  |      SEXP stack_trace( const char *file, int line) {
> |>  |          return R_NilValue ;
> |>  |      }
> |>  |
> |>  | That gives no more undefined symbols when loading, but of course there
> |>  | is no debugging code any more :-(
> |>  |
> |>  | Do you have any idea how to get debugging.cpp functional on FreeBSD?
> |>
> |>  Well, not to put too fine a point on it: that's your job.  Your operating
> |>  system choice, your need.  We may give you the Windows behaviour (ie no
> |>  debugging trace) so that this builds on your system but we have no access to
> |>  *BSD and no particular desire to add this feature.  If you only want to run
> |>  parser and highlight (as per your first mail) then you do not need more.
> |
> | Until now I have no need for the debugging functionality. That depends
> | on packages which will need it.
>
> None AFAIK.  This is mostly an exotic debugging aide for us.
>
> And I think the simplest may be to just treat FreeBSD like Windows here and
> not support the feature.  I have no great interest in re-adding a configure
> script just to support this corner case on your operating system which, by
> all accounts, is not all that frequently employed by Rcpp users.

That sounds good.

> So we will probably add a #define to switch to disabling this along with a
> comment in src/Makevars about how to re-enable it.  So you'd get it to work
> if you can edit a single file.  Sounds fair enough to me.

That is really fair.

> That is if and when we here from you that adding -lexecinfo helps or whether
> you encounter other hurdles.
>
> Cheers, Dirk
>
> |>  Otherwise, Romain may of course be available for contracting.  If you or
> |>  someone else needs this feature on what happens to be a non-standard
> |>  platform, you may have to provide the (financial) resources to make it
> |>  happen.
> |>
> |>  Cheers, Dirk

Thanks again,
Rainer


More information about the Rcpp-devel mailing list