[BioC] Writing R Extensions : problems
Richard Finney
rfinney5 at yahoo.com
Thu Jun 10 20:51:26 CEST 2004
Bioconductors,
I am trying to implement an extension to R
which I hope to make into a bioconductor package.
The program will process Qstar proteomics data.
I wish to implement a function called "binandnorm".
However, I'm getting an unresolved symbol. The
symbol is "TYPEOF__FP7SEXPREC". This problem
appears on 1.8.1and 1.9.0 version of R. I have
installed bioconductor.
I have compiled the program using the
SHLIB R command feature ... which apparently
does this ..
g++ -I/usr/local/lib/R/include -I/usr/local/include
-fPIC -g -O2 -c binandnorm.cpp -o binandnorm.o
g++ -G -L/usr/local/lib -o binandnorm.so binandnorm.o
-L/usr/local/lib/R/bin -lR
I do this to dump some symbols for later
reference ...
elfdump *.so > junk
I am running on a Sun box using R.1.8.1 ...
uname -a
SunOS xxxxxxxxxx.xxx.nih.gov 5.8 Generic_108528-16
sun4u sparc SUNW,Sun-Fire
I run the R command
bash-2.03$ R
R : Copyright 2003, The R Foundation for Statistical
Computing
Version 1.8.1 (2003-11-21), ISBN 3-900051-00-3
R is free software and comes with ABSOLUTELY NO
WARRANTY.
[blah .. blah .. blah ...]
Type 'q()' to quit R.
> version
_
platform sparc-sun-solaris2.8
arch sparc
os solaris2.8
system sparc, solaris2.8
status
major 1
minor 8.1
year 2003
month 11
day 21
language R
> dyn.load("binandnorm.so")
Error in dyn.load(x, as.logical(local),
as.logical(now)) :
unable to load shared library
"/h1/finneyr/BINANDQ/src/binandnorm.so":
ld.so.1: /usr/local/lib/R/bin/R.bin: fatal:
relocation error: file
/h1/finneyr/BINANDQ/src/binandnorm.so: symbol
TYPEOF__FP7SEXPREC: referenced symbol not found
> q()
Save workspace image? [y/n/c]: n
Rrrgghh !!!! Well, let's see if we can find
TYPEOF__FP7SEXPREC ...
bash-2.03$ grep -i TYPEOF__FP7SEXPREC *
nothing. rrrgghhhh.
try fgrep ...
fgrep -l TYPEOF__FP7SEXPREC *
binandnorm.o
binandnorm.so
oh. okay. it is there. the symbol exists
in the object file. why can't it get resolved
when loaded into R ???
Anyone know what's up with this?
I can trim down the R interface code in the C file to
something like this ...
SEXP binandnorm(SEXP SEXPalgorithm, SEXP SEXPqsize1,
SEXP SEXPqsize2, SEXP SEXPoutputoption,
SEXP SEXPoutputfilename, SEXP SEXPfilenames)
{
SEXP ans;
ans = PROTECT(allocMatrix(REALSXP, 1, 1));
return NULL;
}
and when I do the dyn.load() from R I get this ...
... (blah blah ..) ... ld.so.1:
/h1/finneyr/R-1.9.0/bin/R.bin: fatal: relocation
error: file
/h1/finneyr/R-1.9.0/BINANDQ/src/binandnorm.so: symbol
Rf_allocMatrix__FUiii: referenced symbol not found
That symbol Rf_allocMatrix__FUiii really is
there ...
bash-2.03$ fgrep -l Rf_allocMatrix__FUiii *
binandnorm.o
binandnorm.so
I'm not sure what's up with the symbol
extension "FUiii". What's generating that?
If anybody has any knowledge or wild guesses as
to what's going on here, I'd appreciate it.
Thx.
-Richard Finney
More information about the Bioconductor
mailing list