Prof Brian Ripley writes:
On Fri, 14 Sep 2001, Rolf Turner wrote:
I'm having a dynamic loading problem that seems to be
caused by exponentiation (the ** operator in Fortran/ratfor).
This can be illustrated by the following toy example:
===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===
% cat foo.r
subroutine foo(x,n)
x = x**n
return
end
% f77 -c foo.r
/tmp/ratfor.06661.0.f:
foo:
% R CMD SHLIB -o foo.so foo.o
gcc -G -o foo.so foo.o -L/usr/local/lib
% R -q
Error in dyn.load(x, as.logical(local), as.logical(now)) :
unable to load shared library "/home1/faculty/rolf/Traal/Temp/foo.so":
ld.so.1: /usr/local/lib/R/bin/R.bin: fatal: relocation error: file /home1/faculty/rolf/Traal/Temp/foo.so: symbol __pow_ri: referenced symbol not found
===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===
I presume/hope that by handing SHLIB some other flags or by
specifying some environment variable or other, or by ..., I should
be able to get dyn.load() to find ``__pow_ri''.
The same problem does NOT arise when I use Splus3.4 SHLIB and
dyn.load.shared() in Splus3.4, so ``__pow_ri'' must be around
somewhere.
Can anyone tell me (in simple, prescriptive, explicit terms) what
I need to do to alleviate this problem?
I'm running R-1.3.1 on a Sun Sparc Ultra-5, under SunOS 5.7/Solaris 2.7.
Use Fortran! Seriously, on my Ultra1
auk% R CMD SHLIB foo.f
f77 -PIC -O -c foo.f -o foo.o
foo.f:
foo:
gcc -G -o foo.so foo.o -L/usr/local/lib -R/opt/SUNWspro/lib
-L/opt/SUNWspro/lib -L/opt/SUNWspro/WS6U1/lib -L/usr/ccs/lib -L/usr/lib
-lF77 -lM77 -lsunmath -lm -lcx
shows what's up, and with
auk% R CMD SHLIB foo.o dummy.f
f77 -PIC -O -c dummy.f -o dummy.o
dummy.f:
gcc -G -o foo.so foo.o dummy.o -L/usr/local/lib -R/opt/SUNWspro/lib
-L/opt/SUNWspro/lib -L/opt/SUNWspro/WS6U1/lib -L/usr/ccs/lib -L/usr/lib
-lF77 -lM77 -lsunmath -lm -lcx
S-PLUS comes (usually) with support for ratfor: R does not.