+1 for " i personally prefer statically linked. i hate scrambling
around looking for the right redist/dll/etc."
I'd call it hell [1] for novice users like me. :-)
[1] http://en.wikipedia.org/wiki/DLL_Hell
--
HDF: Software that Powers Science
On Thu, Jun 6, 2013 at 3:42 AM, Pedro Vicente <pvicente@xxxxxxx> wrote:
>
> Hey , Allen & Ward, next time I send an email to *both* of your group lists,
> can you just do a "reply-all" ? :-) ... otherwise , we get half of the
> answers.
>
>
>>>Building NetCDF statically is already an option, by passing
>>> -DBUILD_SHARED_LIBS=OFF during configuration.
>>>This will build the netcdf libraries and utilities statically, avoiding
>>> the direct dependency on MSVCR100.dll.
>>>They will, however, still inherit any downstream .dll dependencies from
>>> the curl, hdf and zlib libraries.
>
> Exactly, Ward, netCDF inherits HDF, that 's why I am bugging Allen here :-)
>
> And, yes, the solution is to build *all* downstream code in the *same* way,
> either all static or all dynamic;
> mixing both will get you linking errors.
>
>>>> You might be able to work around this by downloading (or building)
>>>> static versions of these libraries.
>
> Yes, Ward, this can be done by editing the HDF Cmake generated VS projects,
> and changing all of them to static, which I just did.
>
> In the curl case, you can do this by editing the file MakefileBuild.vc and
> change all /MD (dynamic) to /MT (static)
>
> Runtime library configuration
> !IF "$(RTLIBCFG)"=="static"
> #RTLIB = /MT
> RTLIB = /MTd
> RTLIB_DEBUG = /MTd
> !ELSE
> #RTLIB = /MD
> #RTLIB_DEBUG = /MDd
>
>
>>>Our binaries redistribute the MS CRT dlls that are used to build the
>>> binaries.
>
> Hey, Allen, I was not asking for the *binaries* !
>
> I was asking for an *option* in your CMake system that allows
> anyone who wants to generate the Visual Studio projects have them *already*
> "static ready" if they wish...
>
> So that, next time I need to generate everything from scratch I don't have
> to go each to each one of them (50 + projects ) and click the static button
> 50 times ...
>
>
>>>Because of the danger of using different CRTs (HDF lib uses one and user
>>>program uses different one) and the possible memory corruption with
>>>allocations, we build with /MD and provide the CRT with our binary.
>
> I don't pretend to know everything, but when I don't (often :-) ) I search
>
> read this
>
> http://stackoverflow.com/questions/14749662/microsoft-visual-studio-c-c-runtime-library-static-dynamic-linking
>
> quote
>
> " i personally prefer statically linked. i hate scrambling around looking
> for the right redist/dll/etc."
>
> that's what I do, I set to all static , and then move on to do more
> interesting things, like writing software, than dealing with DLL
> idiosyncracies.
>
> quote
>
> "Using /MT is risky if you create DLLs as well as an EXE. You'll end up with
> multiple copies of the CRT in your program.
> This was especially a problem with earlier versions of VS where each CRT
> would get its own heap, "
>
>
> Was this the problem you meant ?
>
> This might be true if you are distributing *binaries* with both the EXE and
> DLL. Or if you are linking your code against a 3rd party library *without*
> the code,
> someone gave you a LIB and a DLL only.
>
> In the HDF, netCDF and NCO worlds none of this is true: all sources are
> available , no secrets here :-)
>
> And you are lucky, Allen , because you only have the downstream ZLIB, and
> netCDF only has curl
>
> Here's a list of all NCO dependencies
>
> zlib ,
> HDF5,
> curl,
> netCDF, including OpenDAP, thank you for that :-)
> ANTLR, a parser generator for ncap2
> GSL, the GNU scientific library
> UDUnits, Unidata units (Not yet available for Windows)
> Regular Expressions (Not yet available for Windows, tough one this one )
>
> I have Visual Studio projects for all these (except UDUnits and Regular
> Expressions)
> , because I need to build the *source* , as you can see many projects to
> change to static/dynamic/32/64bit/debug/release combinations :-)
>
> Pedro
>
>
> ------
> Pedro Vicente, Earth System Science
> University of California, Irvine
> http://www.ess.uci.edu/
>
>
>
> ----- Original Message -----
> From: "Allen Byrne" <byrn@xxxxxxxxxxxx>
> To: <hdf-forum@xxxxxxxxxxxxxxxxxx>
> Sent: Wednesday, June 05, 2013 6:18 AM
> Subject: Re: [Hdf-forum] Make the Cmake Windows build static please !
>
>> Our binaries redistribute the MS CRT dlls that are used to build the
>> binaries.
>> Because of the danger of using different CRTs (HDF lib uses one and user
>> program uses different one) and the possible memory corruption with
>> allocations, we build with /MD and provide the CRT with our binary.
>>
>> Hopefully, as more people use CMake and build a common knowledge of using
>> CMake, those wishing to build alternative versions of HDF will share their
>> code changes.
>>
>> Allen
>>
>> On Wednesday, June 05, 2013 09:34:37 AM Michael Jackson wrote:
>>> Funny, I actually _prefer_ the DLL builds because I distribute the
>>> runtime
>>> C/C++ libraries as allowed by MS. Depending on how one is using the HDF5
>>> executables/libraries having each library linked statically against their
>>> own C/C++ libraries can also lead to problems because of how memory is
>>> allocated/deallocated in each library version. There are 2 evils here and
>>> the idea is to pick the least of them. If anything I would petition the
>>> HDFGroup to provide BOTH a dynamically linked AND a statically linked
>>> runtime version.
>>>
>>> Just my 2 cents. Then again, I build my own HDF5 for our project
>>> precisely
>>> because of issues like this.
>>> ___________________________________________________________
>>> Mike Jackson Principal Software Engineer
>>> BlueQuartz Software Dayton, Ohio
>>> mike.jackson@xxxxxxxxxxxxxx www.bluequartz.net
>>>
>>> On Jun 5, 2013, at 8:24 AM, Pedro Vicente <pvicente@xxxxxxx> wrote:
>>> > Hi Allen, Ward
>>> >
>>> > I have a request regarding your new CMake Windows build system, could
>>> > you
>>> > add an option to make the build static regarding the Microsoft
>>> > libraries
>>> > (MSVCR100D.dll) ?
>>> >
>>> > Starting with version 4.3.1, NCO
>>> >
>>> > http://nco.sourceforge.net/
>>> >
>>> > uses the HDF5 and netCDF Windows libraries made with your CMake system,
>>> > and this is causing problems for NCO users, as explained here
>>> >
>>> > https://sourceforge.net/projects/nco/forums/forum/9830/topic/8345151
>>> >
>>> > and here
>>> >
>>> > https://sourceforge.net/projects/nco/forums/forum/9829/topic/8417103
>>> >
>>> >
>>> > This is just a matter of changing the compiler flag to /MT(d)
>>> >
>>> > http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
>>> >
>>> > Using a dynamic build is just a bad idea, because of these DLL issues.
>>> >
>>> > I have some Windows executables from code I did in the early 90's ,
>>> > that
>>> > unfortunately I cannot run today, just because I linked them with DLLs,
>>> > with the DLLs from the Visual Studio from that time, that do not exist
>>> > anymore (it seems every new version they change the Visual Studio
>>> > Dlls).
>>> >
>>> > Because of this I do not use Dlls, I know that eventually something
>>> > will
>>> > go wrong :-)
>>> >
>>> > Pedro
>>> >
>>> > ------
>>> > Pedro Vicente, Earth System Science
>>> > University of California, Irvine
>>> > http://www.ess.uci.edu/
>>> >
>>> >
>>> > _______________________________________________
>>> > Hdf-forum is for HDF software users discussion.
>>> > Hdf-forum@xxxxxxxxxxxxxxxxxx
>>> > http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>>>
>>> _______________________________________________
>>> Hdf-forum is for HDF software users discussion.
>>> Hdf-forum@xxxxxxxxxxxxxxxxxx
>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> Hdf-forum@xxxxxxxxxxxxxxxxxx
>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
>>
>>
>
> _______________________________________________
> netcdfgroup mailing list
> netcdfgroup@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit:
> http://www.unidata.ucar.edu/mailing_lists/