Skip to content
Prev 45460 / 63424 Next

using openbabel plugins in R

After some more testing I have found that it actually does work if I 
compile without the plugin library but load it with dyn.load. I'm not 
sure why this wasn't working before. It only works though if the plugin 
library is loaded before libobtest2.so (the open babel main lib basically).
     So, to clarify, the following works now:

g++ -shared -o libobtest2.so obtest2.o -fpic -lopenbabel -lR

R>dyn.load("/usr/lib/openbabel/2.2.3/mdlformat.so")
R>dyn.load("libobtest2.so")
R>.Call("test")
   format: 0x7fe114c96d20  #this is the correct result
   NULL


     But now I have a chicken and egg problem. The plugin libraries are 
not stored in a standard directory, but open babel provides a function 
to list their paths. So I need to load the open babel library to fetch 
the plugin paths, then I can load the plugins, but, oops, too late, the 
open babel library is already loaded so loading the plugins now doesn't 
work. I tried using dyn.unload("libobtest2.so") but it didn't work. It 
seems like I'd have to compile a small executable program that uses 
openbabel to fetch the plugin paths, then run it as an external program 
from within R, then load the plugins, then load the open babel lib.
     Does it make any sense that the order in which these are loaded 
affects things? Is there a way to load the plugin lib later and still 
have  it work? If the order does have to be maintained, any better ideas 
how to accomplish this? Thanks.
     Also, here is the dlopen command that openbabel uses:
         dlopen(lib_name.c_str(), RTLD_LAZY | RTLD_GLOBAL)


Kevin
On 03/26/2013 06:54 AM, Dirk Eddelbuettel wrote: