[Rd] Managing DLLs with the same names in an R session
Patrick Aboyoun
paboyoun at fhcrc.org
Fri Apr 24 20:07:43 CEST 2009
Thanks Brian. I'll stop trying to hack the code to work and opt for the
dll rename option.
Patrick
Prof Brian Ripley wrote:
> On Fri, 24 Apr 2009, Patrick Aboyoun wrote:
>
>> I am having a problem using two DLLs with the same name, but
>> obviously located in different directories, in an R session. The
>> troublesome package is the (Bioconductor) Rgraphviz package. It
>> relies on (3rd party software) graphviz and imports functions from
>> (Bioconductor) package graph. Unfortunately, the current stable
>> release of graphviz for Windows
>>
>> http://www.graphviz.org/pub/graphviz/stable/windows/graphviz-2.22.2.msi
>>
>> contains a graph.dll in its bin directory. The situation is that
>> Rgraphviz needs to link to the graph.dll from graphviz,
>>
>> E:\paboyoun>..\biocbld\bbs-2.4-bioc\R\bin\R CMD build Rgraphviz
>> [...omitting output...]
>> ** libs
>> making DLL ...
>> [...omitting output...]
>> gcc -shared -s -o Rgraphviz.dll tmp.def LL_funcs.o Rgraphviz.o
>> RgraphvizInit.o agopen.o agread.o agwr
>> ite.o bezier.o buildEdgeList.o buildNodeList.o doLayout.o
>> graphvizVersion.o init.o -LC:/Graphviz2.22/
>> bin -lgvc -lgraph -lcdt -Le:/biocbld/bbs-2.4-bioc/R/bin -lR
>> [...omitting output...]
>>
>> but at run time R dispatches to the graph.dll from the graph package
>> to resolve the symbols.
>>
>> R-2.9> Sys.which("graph.dll")
>> graph.dll
>> "C:\\GRAPHV~1.22\\bin\\graph.dll"
>> R-2.9> library(Rgraphviz)
>> Loading required package: graph
>> Loading required package: grid
>>
>> << Message box appears: The procedure entry point agclose could not
>> be located in the dynamic link library graph.dll >>
>>
>> Running Rterm.exe through the DependencyWalker software, I see that
>> the gvc.dll and cdt.dll graphviz libraries are properly loaded, but
>> the graph.dll dependency of Rgraphviz.dll links to the graph.dll
>> library from the graph package. I tried passing the DLLpath for
>> graphviz to the library.dynam function call when loading
>> Rgraphviz.dll in the .onLoad function within Rgraphviz and it had no
>> effect. I also tried library.dynam.unload/dyn.unload-ing the
>> graph.dll from the graph package and then loading the Rgraphviz.dll
>> followed by the reloading of the graph.dll from the graph package and
>> the graph.dll dependencies become broken to the point that a call out
>> to a graph.dll results in a GPF.
>>
>> Is is possible to manage DLLs with the same name from R or do I need
>> to rename one of the DLL names to make them unique?
>
> On Windows, the latter is the only completely reliable solution that
> we know of. We've been here with iconv.dll, and had to rename the R
> copy to Riconv.dll as a result. (Unfortunately, it depends on the
> version of Windows and even the service pack installed. AFAICS some
> versions of Windows only allow one DLL of a given name to be loaded by
> a single process, here the R process.)
>
> There are (older?) Unix-alike OSes with similar issues.
>
More information about the R-devel
mailing list