[PD-dev] removing pd/bin/msvr*.dll from Pd/win

Christof Ressi christof.ressi at gmx.at
Wed Jan 23 01:54:07 CET 2019


neither Pd nor any externals built with MinGW (basically every external using pd-lib-builder) depend on the msvcrt.dll (or the msvcr90.dll or pthreadVC.dll) included in pd/bin. externals built with pd-lib-builder don't link against the runtime DLLs shipped with Pd anyway. I've deleted them from the Pd bin folder and everything works fine on several machines. 

apart from that, Pd and pure C externals (no matter if compiled with MinGW or VS) only use C functions from the MSVC runtime and this doesn't cause troubles because memory or handles don't cross module boundaries and data structures are well defined. e.g. you must never malloc in one module and free in another because there might be different runtimes involved. 

C++ externals compiled with MinGW usually link statically against libstdc++ (or ship the DLL) so there are no missing symbols. C++ externals compiled with VS would ideally link statically (see below), but they should *not* rely on a runtime DLL shipped with Pd. if they do, I would reach out to the maintainer or recompile and upload to Deken. so I would say let's get rid of the runtime DLLs in pd/bin.


> On 1/22/19 11:36 PM, Miller Puckette wrote:
> > Would this mean that anyone shipping a binary external for Windows would
> > have to put it in a separate directory with its own msvcrt.dll/msvcr90.dll?
> > Sounds like a nightmare to me.
> but i think that's really the only sane way.
> unless you can guarantee that Pd and all externals are built with the
> same compiler.

or they can link statically. This is what most VST plugins seem to do. Dependency Walker doesn't show any open dependencies on MSVC runtime libraries on the plugins I've checked. They obviously coexist peacefully in DAWs although they might be from different decades and are mostly written in C++.

> afaict, Gem really requires to link against msvcrt.

using Dependency Walker on the recent Gem 0.94 I see that it only uses C symbols from the MSVC, like any other plugin compiled with MinGW, so I don't see a problem here. the C++ symbols come from the libstdc++ which you ship (although you could also link statically). OTOH, the old Gem from Pd extended depended on C++ symbols from msvcr71.dll (I guess because it was compiled with VS) and if that DLL was missing Gem wouldn't load.


> Gesendet: Mittwoch, 23. Januar 2019 um 00:51 Uhr
> Von: "Miller Puckette" <msp at ucsd.edu>
> An: "IOhannes m zm??lnig" <zmoelnig at iem.at>
> Cc: pd-dev at lists.iem.at
> Betreff: Re: [PD-dev] removing pd/bin/msvr*.dll from Pd/win
> > > Here's an idea, what if I stuck  msvcr*dll in a separate directory and
> > > called SetDllDirectory another time in s_loader.c to allow externs to find it
> > > if they need it?
> > > 
> > hmm, but SetDllDirectory() only allows us to specify a single additional
> > directory (calling it multiple times will just change this single
> > directory). and we already need it for specifying the plugin-path, so
> > the external can ship its own dependencies - beyond msvcrt.dll
> > 
> > fgmdars
> > IOhannes
> > 
> Lame fix would be to try it twice, first the "good" way (looking where the
> extern is), then as a backup, in .../pd/bullshit where I could hide the old
> DLs.
> > _______________________________________________
> > Pd-dev mailing list
> > Pd-dev at lists.iem.at
> > https://lists.puredata.info/listinfo/pd-dev
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev

More information about the Pd-dev mailing list