[Rd] R's --enable-threads does nothing?; gdb needs -lpthread

Andrew Piskorski atp at piskorski.com
Mon Oct 5 23:22:02 CEST 2009

In the R-2-9-branch (svn revision 49914, 2009-09-24), R's configure
script has an "--enable-threads" option.  But, does it do anything
useful?  When I use "--enable-threads=posix", some of the configure
output changes slightly, but it seems to have no effect on the actual
link commands used when building R.  Is that a bug, or am I
misunderstanding what it's supposed to do?

Btw, ldd said that exactly these 4 objects are linked against
libpthread.so.0, regardless of whether I use --enable-threads or not:

Next I tried setting the "LIBS=-lpthread" environment variable when
calling configure - that works.  (Perhaps I should have also set
FLIBS, I'm not sure.)  The generated Makeconf file now has this:

  LIBS =  -ldl -lm -lpthread 

and building with that links my libR.so against libpthread.so.0, which
fixes the gdb problem described below.  Is there any reason you know
of NOT to link R with -lpthread on Linux, any potential downside?

Now, why do I care about this -lpthread stuff in the first place?
It's to work around a gdb limitation.

I have a custom library of C code which I use from R, and my library
needs to be linked with -lpthread.  I know that R isn't thread-safe,
and my code is not itself using threads, but it in turn statically
links in some lower level libraries which insist on having the

That has worked fine for me for a long time, no problems, except that
gdb won't work!  When I run R under the debugger with "R -d gdb", gdb
only works if my own linked-with-pthread package is NOT loaded.  As
soon as I load it, gdb stops with this error:

   [Thread debugging using libthread_db enabled] 
   Error while reading shared library symbols: 
   Cannot find new threads: generic error 

Googling says that happens because the R binary starts out without
thread support, and gdb doesn't know what to do when my *.so suddenly
brings in the thread stuff.  Since I can't stop using -lpthread in my
library, the obvious fix is for me to build R itself with -lpthread,
so gdb doesn't get confused.

Andrew Piskorski <atp at piskorski.com>

More information about the R-devel mailing list