[R] dyn.load() error: bad external relocation length

Prof Brian Ripley ripley at stats.ox.ac.uk
Sun Oct 30 16:45:32 CET 2005


Try `Writing R Extensions' (as referred to on the help page for SHLIB 
...).

On Sun, 30 Oct 2005, Walton A. Green wrote:

>
> Duncan,
>
> Many thanks: R CMD SHLIB is proably what I was looking for....do you know
> where the most extensive documentation for that is located? I looked at
> the man page for R and R CMD SHLIP --help, but there wasn't much detail on
> how it works. Does it (or can it be configured to) run a makefile? (I have
> been compiling the C using a makefile written by someone else: the larger
> picture is that we're trying to write R wrappers for a bunch of C
> programs---my colleague is modifying the C---so eventually they'll be
> put in a package's /src directory, but for now I am just trying to test by
> making sure they can be called from R before putting them together in a
> package. So far I've just been using system(), which works fine on my
> machine, but all the packages I've looked at use .C()/.Call() in
> preference to system(), so I assume I should be learning how to use
> .C()/.Call()....
>
> Thanks,
> Walton
>
> On Sat, 29 Oct 2005, Duncan Temple Lang wrote:
>
>> Hi Walton.
>>
>> .C/.Call are interfaces to _compiled_ C routines in a dynamically
>> loaded library (DLL or DSO - shared object).  A progra
>> A program is often created from compiling C code into an executable.
>> We can call the executable via system, but we cannot access its routines
>> via .C/.Call.
>>
>> So, if you have C code, use R CMD SHLIB to compile it into a loadable
>> libray and use dyn.load() to load it. Putting the code in the src/
>> directory of a package makes the need to do this less explicit.
>>
>> But if you want to use system(), again it can be done "portably" in a
>> package.
>> Arrange that the package creates and puts the executable in
>> the package's installed area.  Arrange that the program is
>> put in, say, inst/bin within the package and then it will be installed
>> into the bin/ directory of the package. Then you can access it with
>>
>>     system.file("bin", "myProg", package = "myPackageName")
>>
>> and you can use that in your call to system().
>>
>> The down side is that you will have to ensure that the program is built
>> in a portable way. So if you won the C code, it is almost the same thing
>> as building a DLL and using .C/.Call.
>>
>> HTH
>>
>>    D.
>>
>>
>>
>> Walton A. Green wrote:
>>> R-helpers,
>>>
>>> Is there an easy way to call an external (C) program using .C or .Call
>>> without including the code in a package. I know how to do it using
>>> system(), but that doesn't seem to be a permanent or portable solution.
>>> Initially I tried:
>>>
>>> .Call('filepath.to.c.function', arg1)
>>>
>>> and got this error:
>>>
>>> Error in .Call("filepath.to.c.function", "arg1",  :
>>> 	"C" function name not in load table
>>>
>>> So read the section on foreign language interfaces in the Writing R
>>> Extensions manual but when I tried:
>>>
>>> dyn.load('filepath.to.c.function')
>>>
>>> I got:
>>>
>>> Error in dyn.load(x, as.logical(local), as.logical(now)) :
>>> 	unable to load shared library 'filepath.to.c.function':
>>>   dlopen(filepath.to.c.function, 6): bad external relocation length
>>>
>>> Do you need to run R_registerRoutines before dyn.load()? I couldn't find
>>> any mention of this error on the web....
>>>
>>> Walton
>>>
>>> platform powerpc-apple-darwin7.9.0
>>> arch     powerpc
>>> os       darwin7.9.0
>>> system   powerpc, darwin7.9.0
>>> status
>>> major    2
>>> minor    1.1
>>> year     2005
>>> month    06
>>> day      20
>>> language R
>>>
>>> ______________________________________________
>>> R-help at stat.math.ethz.ch mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>>
>
> ######################## .signature ########################
> # Walton A. Green                    walton.green at yale.edu #
> # 139 Caulkinstown Road     P. O. Box 208109, Yale Station #
> # Sharon, Connecticut 06069   New Haven, Connecticut 06520 #
> # (860) 364-5100                            (203) 640-8122 #
> #################### 60 characters wide ####################
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list