On 24 April 2017 at 16:59, Peter Wu <pe...@lekensteyn.nl> wrote:

> 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!
>
>
Who knows what will be in the next Visual Studio.  I haven't seen any
announcements, but as VS 2017 was only released just over a month ago I
don't expect any public announcements yet.

It's possible that future C++ language changes may force them to change the
ABI.

-- 
Graham Bloice
___________________________________________________________________________
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

Reply via email to