Skip to content

dyn.load in linux: missing libraries?

4 messages · Peter Dalgaard, Tyler Smith, Uwe Ligges

#
Hi,

I've just about got myself transferred from windowsXP to Linux (Mepis 
3.3.1-1). I've got R 2.1.1, emacs, and ess running from the debian 
repositories. Of course, there is a hitch. I have a bit of C code in one 
of my personal functions. I have, apparently without problem, been able 
to compile it using R CMD SHLIB, but when I try to dyn.load it I get the 
following error:

 > dyn.load("Cfiles/Neutral/Bell2000.dll")
Error in dyn.load(x, as.logical(local), as.logical(now)) :
    unable to load shared library 
'/home/tyler/RWorkingDirectory/Cfiles/Neutral/Bell2000.dll':
  /home/tyler/RWorkingDirectory/Cfiles/Neutral/Bell2000.dll: invalid ELF 
header

I take this to mean one of the required libraries is either not loaded 
or not updated. Or, I've overlooked something. Can anyone point me to a 
solution? I tried updating my perl files, and I haven't found anything 
using the R Site Search...

Thanks,

Tyler
#
Tyler Smith <tyler.smith at mail.mcgill.ca> writes:
Nope, the missing library is the one that you're trying to load.
Dynamic libraries are not called .dll on Linux, but rather .so...

You should probably read up on "Writing R Extensions", including the
hints on how to write portable code (use library.dynam).
#
ah, that's better. For an immediate fix I just changed .dll to .so, and 
it appears to work perfectly. I will read through Writing R Extensions 
to make sure I understand what I'm doing!

Thanks!

Tyler
Peter Dalgaard wrote:

            
#
Tyler Smith wrote:

            
No, change it to
   .Platform$dynlib.ext
or do as already recommended: use library.dynam()

Uwe Ligges