Prof Brian Ripley wrote:

Some of them use Fortran, please note, and libtool is none too good at that.

I didn't have an (obvious) problem with that. I did notice that DYLIB_* variables in Makeconf.in didn't have USE_LIBTOOL_TRUE/FALSE conditionalizations. That was a place it broke for me with Fortran code in modules. Was it a compile-time problem or a run-time problem you saw?


Also I noticed compilation invocations weren't set up in R 2.0.1 to prepend
"libtool --mode=compile". When I inserted those for C and Fortran, reactivated the linkage code for libtool that was already there, and then went through each module and made *.lo the dependency instead of *.o, and made *.la the target instead of *.so, I managed to get (.la) modules installed in the build tree under /build/R/library/{tools,grid,methods,splines,stats,tools).


Next I went to the src/unix directory and removed the object code, and rebuilt using:

make CPPFLAGS='-Ddlsym=lt_dlsym -Ddlopen=lt_dlopen -Ddlclose=lt_dlclose'

After that I went back to the src/main directory and first edited Rmain.c to add an include of ltdl.h , a call to LTDL_SET_PRELOADED_SYMBOLS() and a call to "lt_dlinit ()" before "Rf_initialize_R (ac, av)".

Then I modified the linkage of R.bin to add this at the start of the command:

-dlpreopen /build/R/library/tools/libs/tools.la -dlpreopen /build/R/library/stats/libs/stats.la -dlpreopen /build/R/library/methods/libs/methods.la -dlpreopen /build/R/library/grid/libs/grid.la -dlpreopen /build/R/library/stats/libs/splines.la

and:

-lltdl

at the end of the link (the libtool dlopen compatibility interface).

Following that I just went to the top of the build tree of R and let the build finish.

As you can see, no calls to dlsym get made:

$ R_HOME=/build/R gdb ./R.bin   -q
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) break main
Breakpoint 1 at 0x8060c52: file /src/R-2.0.1/src/main/Rmain.c, line 32.
(gdb) run -q
Starting program: /build/R/src/main/R.bin -q

Breakpoint 1, main (ac=2, av=0xfefbce44) at /src/R-2.0.1/src/main/Rmain.c:32
32      {
(gdb) break dlsym
Breakpoint 2 at 0xf6fa3de6
(gdb) c
Continuing.
Detaching after fork from child process 6376.
>

Compare this to a default build of R on Linux that would have them:

$ R -d 'gdb -q' -q
(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) break main
Breakpoint 1 at 0x805ceb6
(gdb) run -q
Starting program: /usr/lib/R/bin/exec/R -q
(no debugging symbols found)...(no debugging symbols found)...
Breakpoint 1, 0x0805ceb6 in main ()
(gdb) break dlsym
Breakpoint 2 at 0xf6f55de6
(gdb) c
Continuing.


Breakpoint 2, 0xf6f55de6 in dlsym () from /lib/libdl.so.2
(gdb)

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to