From duncan at wald.ucdavis.edu  Tue Jan  8 07:40:39 2008
From: duncan at wald.ucdavis.edu (Duncan Temple Lang)
Date: Tue, 08 Jan 2008 19:40:39 +1300
Subject: [Rd] Finding windows DLLs
In-Reply-To: <Pine.LNX.4.64.0801080558300.29081@gannet.stats.ox.ac.uk>
References: <6phy7b12z44.fsf@gopher4.fhcrc.org> <478284C8.1040203@stats.uwo.ca>
	<Pine.LNX.4.64.0801072141160.23156@gannet.stats.ox.ac.uk>
	<47830232.8000503@wald.ucdavis.edu>
	<Pine.LNX.4.64.0801080558300.29081@gannet.stats.ox.ac.uk>
Message-ID: <47831AE7.6040308@wald.ucdavis.edu>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



Prof Brian Ripley wrote:
> On Tue, 8 Jan 2008, Duncan Temple Lang wrote:
> 
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> While I don't disagree with the general need to provide an interface
>> to SetDllDirectory, etc., I think the discussion about 3rd party
>> libraries has slightly missed the more obvious solution.
>> Instead of using a DLL, such packages can link against a _static_
>> version of the 3rd party and so not get into this dynamic search and
>> load but guarantee that the symbols are resolved to what they were
>> intended at build time.
> 
> Only if there is one. 

I assume 'one' refers to DLLs.
Either way, of course you can link against static versions of all
libraries and not just one. It requires having static versions of each
library.

> This has been my practice when building Windows
> binary packages, but as in the recent example of ncdf, the developers of
> the third-party (netcdf) set up their make system only to implement some
> Windows tweaks when a DLL was built.  More commonly, the third-party has
> to be built under a different compiler (typically VC++), and the static
> library is not compatible with MinGW.  (iconv and Tcl/Tk are two
> examples where at least at one time MinGW builds didn't work correctly.)


> 
> In the case of XML, we could revert to my practice before Uwe took over,
> as I did (after some struggle) build libxml2/zlib statically under older
> versions of MinGW and so would expect to be able to do so again.
> 

Well this is the issue - whether we want to build our own versions of
a static version of a DLL.  It would be a lot better if Windows users
were aware of the work done to support them and realized that it reduced
the resources available for more creative work.



>> There are lots of advantages to using DLLs, but in many cases
>> we are not exploiting these and a static link would make these
>> issues irrelevant and not require users to know about PATH settings, etc.
>>
>> D.
>>
>>
>> Prof Brian Ripley wrote:
>>> On Mon, 7 Jan 2008, Duncan Murdoch wrote:
>>>
>>>> On 1/7/2008 2:51 PM, Martin Morgan wrote:
>>>>> The XML package relies on libxml2.dll (e.g., bundled with the CRAN
>>>>> binary) installed in library/XML/libs. Unfortunately,
>>>>> c:/WINDOWS/system32/libxml2.dll will be found and loaded before
>>>>> this.
>>>>>
>>>>> Is there any programatic solution?
>>>> Search order for DLLs is version dependent on Windows.  The best way to
>>>> be sure of what you're loading is to fully specify the path to the DLL,
>>>> and this generally requires you to use API calls LoadLibrary() and
>>>> GetProcAddress() rather than relying on automatic loading of
>>>> dependencies.
>>>>
>>>> I don't know how many entry points XML is importing from
>>>> libxml2.dll; if
>>>> there are a lot, LoadLibrary() will be a pain to use, and it might be
>>>> easiest to rename libxml2.dll and hope to avoid a collision.
>>>
>>> About 85.  But it's worse than that, as libxml2.dll itself imports from
>>> zlib1.dll and iconv.dll, and there is one of the latter in the
>>> application
>>> directory in R >= 2.6.0.  So even if you find the right libxml2.dll, you
>>> may not find the right zlib1.dll and iconv.dll (and I already knew that
>>> you found R's iconv.dll, which fortunately works).
>>>
>>> I think we do need to provide an interface to SetDllDirectory,
>>> probably as
>>> an additional argument to dyn.load.
> 
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHgxrn9p/Jzwa2QP4RAnsVAJsEkOT7DEu3pIOkIiA23RZ9mACIfACeIqrG
L3YrWfoD916Vbzu1zy93KkU=
=6yOz
-----END PGP SIGNATURE-----



[Rd] Finding windows DLLs
Duncan Temple Lang