dynload for R on AIX (>= 4.2)

Martin Maechler Martin Maechler <maechler@stat.math.ethz.ch>
Mon, 14 Jun 1999 10:01:00 +0200

>>>>> On Fri, 11 Jun 1999 15:15:33 -0400, Thomas Vogels <tov@infiniti.ece.cmu.edu> said:

    Thomas>   since I've never used dlsym and friends before, I coded a
    Thomas> test case last night to understand what's going on.  I've put
    Thomas> it at: http://www.ece.cmu.edu/~tov/public/dltest.tar.gz

got it

    Thomas> It should work out of the box for AIX 4.2 and Linux.  It's a
    Thomas> simple program that loads a shared object, uses it (with
    Thomas> references back to the main program), and then discards it.
    Thomas> Main point of the exercise is to find out how to compile this
    Thomas> stuff with AIX.

    Thomas> The "ugliness" that I encounter is that I need a file of the
    Thomas> exported symbols in R and the libraries (libappl.a, libmath.a,
    Thomas> etc.).  Otherwise I get core dumps.  Any suggestions for when
    Thomas> to build it or where to patch the Makefiles?

Couldn't you just 'nm' the  R.binary file?
That should be available *before* you start building  *.so's ?
Then it could happen in src/main/Makefile[.in].

The "tricky/tedious" part is to have "configure" produce that different
Makefile for the case of AIX only.
It seems, the FLAGS and the Makefile entry for the *.exp file (see below)
would also have to present in one of the two Makeconf  files or in every
Makefile that builds a *.so.

    Thomas> If you have a machine with AIX, would you mind downloading the
    Thomas> dltest tarfile?  Just unzip it, untar it.  Then in the dltest
    Thomas> directory, start "make test".  Should print "OK" eventually...

It did print "OK".  
I see in the "Makefile" that you're creating the list of exported objects
simply using  nm & awk :
(cited for those who haven't got your code ready):

    NM = nm
    NM_FLAGS = -g -h
    AWK = awk
    LD_FLAGS = -bdynamic -bE:main.exp
    LIBS = -ldl
    SHLIB_LD = /bin/ld
    SHLIB_LD_FLAGS = -bso -bM:SRE -H512 -T512 -bnoentry -bexpall -bI:main.exp


    main.exp : main.o
	    $(NM) $(NM_FLAGS) main.o | $(AWK) ' \
	    BEGIN { print "#! ."; } \
	    $$2 == "T" && $$1 != ".main" { print substr ($$1, 2) } \
	    ' > $@

which looks very reasonable.
Now we just need configure build the proper Makeconf(s) and Makefile(s)
and things would hopefully work..

Could we short-cut E-mail ( R-core, Arne, TomV ) to get this going?
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch