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

Dirk Eddelbuettel edd at debian.org
Tue Jan 4 18:58:16 CET 2011


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.
 
| > | 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.

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

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.

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 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

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list