On Mon, Apr 24, 2017 at 04:41:27PM +0100, Graham Bloice wrote: > On 24 April 2017 at 15:28, Pascal Quantin <pascal.quan...@gmail.com> wrote: > > > > > > > 2017-04-24 16:25 GMT+02:00 Graham Bloice <graham.blo...@trihedral.com>: > > > >> > >> > >> On 24 April 2017 at 14:56, Pascal Quantin <pascal.quan...@gmail.com> > >> wrote: > >> > >>> Hi Peter > >>> > >>> 2017-04-24 15:43 GMT+02:00 Peter Wu <pe...@lekensteyn.nl>: > >>> > >>>> Hi, > >>>> > >>>> Are there possible issues to be aware of when using the libraries (built > >>>> with mingw/msvc2013) with the Wireshark binaries built with VS2017? > >>>> When trying it with a friend, it seems to build and run with no issues. > >>>> > >>>> I thought that there can be problems with combining different MSVC > >>>> runtime versions in one binary? Looking through the libraries, it seems > >>>> that there is a combination of at least MingW (GeoIP?) and MSVC (Lua). > >>>> (And apparently VS2015 (14.0) and VS2017 (14.1) are binary compatible.) > >>>> > >>> > >>> Just a side note: most of our 3rd party libraries are compiled with > >>> MinGW(32|64) except zlib (that we compile from scratch if I remember > >>> properly, cannot check right now), Lua for 2.0.X and 2.2.X and Qt. > >>> Historically we were using a MinGW Lua build but that was triggering a > >>> specific MinGW bug and we switched to MSVC based Lua library to work > >>> around > >>> this. But it required us to package Lua for every supported MSVC variants > >>> (as you need to have the corresponding C runtime installed on your PC > >>> while > >>> Wireshark installer packages the C runtime of the version you used to > >>> compile), which was painful. That's also why it is highly suggested to > >>> install the Qt package matching the MSVC version you intend to use for > >>> compilation. > >>> Since the MinGW bug was fixed, so master branch is again using the MinGW > >>> based Lua library. The only pre-compiled 3rd party package built with MSVC > >>> I can think to right now is Qt. As of today they offer MSVC2013 and > >>> MSVC2015 flavors (there is also a MinGW build but for 32 bits only). It > >>> looks like Qt 5.9 will provide a MSVC2017 version according to > >>> http://lists.qt-project.org/pipermail/development/2016-Decem > >>> ber/028159.html > >>> > >>> I think Graham proposed to discuss which MSVC to use (for 2.5 I guess) > >>> during Sharkfest US. > >>> > >>> > >>> > >> The major issue with using DLL's that are compiled with a different C > >> runtime (CRT) from the main application is the issue of different heaps for > >> each CRT and mallocing from one and freeing from a piece of code using > >> another leads to bad things happening. If the malloc\free is all done from > >> within code that uses the same CRT then you should be OK. > >> > > > > This is exactly the issue we faced with our GeoIP library (bug 13578) and > > why I added a GeoIP_free symbol. > > > > > >> The reason why the CRT changed with each version of Visual Studio was > >> that this was the only way for MS to service the CRT with bug fixes as it > >> couldn't be upgraded with Windows Updates as that might break various > >> applications (that used the ill-advised static linking to the CRT). > >> > >> The Universal CRT was introduced with Windows 10\VS 2015 to allow Windows > >> Updates to service a portion of the runtime [1]. The part of the CRT that > >> deals with heaps is now serviced by the OS, so theoretically apps built > >> with VS2015 or later (with the Windows 10 SDK) can now use DLL's compiled > >> with VS2015 or later. > >> > > > >> > >> [1]: https://blogs.msdn.microsoft.com/vcblog/2015/03/03/intr > >> oducing-the-universal-crt/ > >> > > > > Nice. But do you know if practice is working as good as theory ? > > > > I don't. This [1] earlier MS blog entry goes into a little more detail > about the split and says that the VS part contains process start-up and > exception handling stuff. > > I do note however that vcpkg doesn't appear to build VS specific versions > of libraries and is available for VS 2015 update 3 or later.
I doubt that they will make it available for pre-2015 versions, but according to a vcpkg developer, there might be version suffixes in the future: https://www.reddit.com/r/cpp/comments/5ud9sr/if_youre_doing_windows_dev_and_not_using_vcpkg/ | | vcpkg install rapidjson:x64-windows | And what compiler/version is this for? We use a system of triplets that each define an entire, consistent toolchain and build target. We only support targets of VS2015/2017 today (they're binary-interchangeable). So, in the case of :x64-windows, this is built using the v140/v141 ABI against Windows Desktop amd64. In the future, we look forward to adding :x64-win-vXYZ and beyond to ensure you never mix ABIs! -- Kind regards, Peter Wu https://lekensteyn.nl ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe