Wireshark mailing list archives
Re: Visual Studio 2013/2015/2017 compatibility and libraries
From: Graham Bloice <graham.bloice () trihedral com>
Date: Mon, 24 Apr 2017 18:01:45 +0100
On 24 April 2017 at 16:59, Peter Wu <peter () 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.quantin () gmail com>wrote:2017-04-24 16:25 GMT+02:00 Graham Bloice <graham.bloice () trihedral com:On 24 April 2017 at 14:56, Pascal Quantin <pascal.quantin () gmail com> wrote:Hi Peter 2017-04-24 15:43 GMT+02:00 Peter Wu <peter () lekensteyn nl>:Hi, Are there possible issues to be aware of when using the libraries(builtwith mingw/msvc2013) with the Wireshark binaries built with VS2017? When trying it with a friend, it seems to build and run with noissues.I thought that there can be problems with combining different MSVC runtime versions in one binary? Looking through the libraries, itseemsthat there is a combination of at least MingW (GeoIP?) and MSVC(Lua).(And apparently VS2015 (14.0) and VS2017 (14.1) are binarycompatible.)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 triggeringaspecific MinGW bug and we switched to MSVC based Lua library to workaroundthis. But it required us to package Lua for every supported MSVCvariants(as you need to have the corresponding C runtime installed on yourPC whileWireshark installer packages the C runtime of the version you used to compile), which was painful. That's also why it is highly suggestedtoinstall the Qt package matching the MSVC version you intend to useforcompilation. Since the MinGW bug was fixed, so master branch is again using theMinGWbased Lua library. The only pre-compiled 3rd party package builtwith MSVCI 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).Itlooks 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 Iguess)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 differentheaps foreach CRT and mallocing from one and freeing from a piece of code using another leads to bad things happening. If the malloc\free is alldone fromwithin code that uses the same CRT then you should be OK.This is exactly the issue we faced with our GeoIP library (bug 13578)andwhy 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 fixesas itcouldn'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 allowWindowsUpdates to service a portion of the runtime [1]. The part of the CRTthatdeals with heaps is now serviced by the OS, so theoretically appsbuiltwith VS2015 or later (with the Windows 10 SDK) can now use DLL'scompiledwith 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-request () wireshark org?subject=unsubscribe
Current thread:
- Visual Studio 2013/2015/2017 compatibility and libraries Peter Wu (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Pascal Quantin (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Peter Wu (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Pascal Quantin (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Graham Bloice (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Pascal Quantin (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Graham Bloice (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Peter Wu (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Graham Bloice (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Peter Wu (Apr 24)
- Re: Visual Studio 2013/2015/2017 compatibility and libraries Pascal Quantin (Apr 24)