Ethereal-dev: RE: [Ethereal-dev] Is it possible to build Ethereal with the MSVC++ Toolkit 2003
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Donnie Hale" <donnie@xxxxxxxxxxxxxx>
Date: Wed, 21 Apr 2004 23:51:26 -0400
I believe this has been alluded to in other threads, but just in case... There are numerous 3rd party libraries on which ethereal depends. I've downloaded them all and run "dumpbin /imports" against many of them. As far as I can tell, they are all dependent on "MSVCRT.DLL" - the dynamically-linked version of the C runtime library. As the majority of these libraries are distributed as DLLs, that makes sense. Unless incredibly tight boundaries are set up between the services that a DLL provides and its callers, it is generally unsafe to statically link the C RTL into a DLL. Doing so guarantees that any binaries that call it will have a different instance of the C RTL when they run. This impacts things like memory management - each RTL instance has its own heap, for example; so you can't allocate memory in one and be sure you can safely free it in another. My point is that this same constraint applies if one were to attempt to build ethereal with the new command-line tools from MS, statically linking the RTL. You'd have a .exe with its own RTL inside the binary; and it would be using numerous DLLs which would be sharing the RTL provided by MSVCRT.DLL. Unfortunately, as I discovered recently, even if you try to compile ethereal against the DLL flavor of the RTL, the latest tools (VS.NET 2003 and, I'm sure, the command line tools), you still have an equivalent problem. That's because the latest tools require "MSVCRT7.DLL", which is the redistributable C RTL that MS now wants you to ship with your apps and install in the app's "bin" directory. In that case, you'd have a .exe using MSVCRT7.DLL's RTL and all of the 3rd party DLLs using MSVCRT.DLL's RTL. Even if it worked a lot of the time, I'd expect numerous confounding edge cases that wouldn't be worth trying to support. Best I can tell, there are only a few correct solutions: 1) Recompile all of the 3rd party libraries w/ the new tools, building them as DLLs that require MSVCRT7.DLL. Then build ethereal the same way. This keeps things closest to how they are now (pretty much all 3rd party libraries as DLLs). The problem could occur again if/when the "latest" C RTL is called MSVCRT8.DLL (or some such). To work around that, you'd have to have different builds of the 3rd party DLLs for each flavor of the C RTL DLL that should be supported. 2) Recompile all of the 3rd party libraries w/ the new tools as static libraries that use the static C RTL. Build ethereal with those static libraries and the static C RTL. Deal with real large .exe's. This is the most future-proof, as there's no concern about C RTL issues except when dealing with the expected symbols at link time. Assuming the link succeeds (and something ridiculous hasn't happened like a change in calling conventions), the binary will work. 3) Stick w/ MSVC6 ad infinitum. Even that has its problems, apparently, as I'll likely have to get into in a near-future message. 4) Continue down the path of some other threads and make the cygwin build of ethereal the first-class windows citizen. That probably has its issues, too. FWIW... Donnie -----Original Message----- From: ethereal-dev-bounces@xxxxxxxxxxxx [mailto:ethereal-dev-bounces@xxxxxxxxxxxx]On Behalf Of Biot Olivier Sent: Tuesday, April 20, 2004 7:35 AM To: 'Ethereal development' Subject: RE: [Ethereal-dev] Is it possible to build Ethereal with the MSVC++ Toolkit 2003 and nmake 1.5? |-----Original Message----- |From: Andrew Hood | |Biot Olivier wrote: || Hi list, || || I was happily surprised to know that Redmond decided to |distribute the || command-line "VC++ Toolkit 2003" and that its EULA does not |seem to be as || restrictive as the fully-fledged VC++ 2003. || || This raises two questions to me: || || 1. Are we allowed to build and "ship" Ethereal built with |the VC++ Toolkit || 2003, meaning that we are not infringing the EULA? || || 2. How do we technically proceed as I understood from previous |postings that || there were incompatibilities between libraries compiled with |different || versions of MSVC++? | |IIRC the blurb said there were only static libraries included in the |free version. Hence there should be no library issues, but will create |big executables. I see. However this may be an interesting path to walk, no? If I look at the size of the binaries and executables (I manually added NMAKE 1.5 from the link posted previously). $ cd /cygdrive/c/Program\ Files/Microsoft\ Visual\ C++\ Toolkit\ 2003/ $ ls -l bin/* -rwx------+ 1 Administ mkgroup- 5056 Sep 16 1994 bin/NMAKE.ERR -rwx------+ 1 Administ mkgroup- 65536 Sep 16 1994 bin/NMAKE.EXE -rwx------+ 1 Administ mkgroup- 693 Jun 20 1995 bin/README.TXT -rwx------+ 1 Administ mkgroup- 933888 Feb 21 2003 bin/c1.dll -rwx------+ 1 Administ mkgroup- 2207744 Feb 21 2003 bin/c1xx.dll -rwx------+ 1 Administ mkgroup- 1867776 Feb 21 2003 bin/c2.dll -rwx------+ 1 Administ mkgroup- 86016 Feb 21 2003 bin/cl.exe -rwx------+ 1 Administ mkgroup- 145 Feb 21 2003 bin/cl.exe.config -rwx------+ 1 Administ mkgroup- 719360 May 31 2002 bin/dbghelp.dll -rwx------+ 1 Administ mkgroup- 647168 Feb 21 2003 bin/link.exe -rwx------+ 1 Administ mkgroup- 145 Feb 21 2003 bin/link.exe.config -rwx------+ 1 Administ mkgroup- 73728 Mar 18 2003 bin/msobj71.dll -rwx------+ 1 Administ mkgroup- 241664 Feb 21 2003 bin/mspdb71.dll -rwx------+ 1 Administ mkgroup- 499712 Mar 18 2003 bin/msvcp71.dll -rwx------+ 1 Administ mkgroup- 348160 Feb 21 2003 bin/msvcr71.dll $ ls -l lib/* -rwx------+ 1 Administ mkgroup- 191866 Aug 10 2002 lib/kernel32.lib -rwx------+ 1 Administ mkgroup- 2707332 Feb 21 2003 lib/libc.lib -rwx------+ 1 Administ mkgroup- 3023122 Mar 18 2003 lib/libcd.lib -rwx------+ 1 Administ mkgroup- 94208 Mar 18 2003 lib/libcd.pdb -rwx------+ 1 Administ mkgroup- 2937240 Feb 21 2003 lib/libcmt.lib -rwx------+ 1 Administ mkgroup- 3604302 Feb 21 2003 lib/libcp.lib -rwx------+ 1 Administ mkgroup- 4433724 Mar 18 2003 lib/libcpd.lib -rwx------+ 1 Administ mkgroup- 225280 Mar 18 2003 lib/libcpd.pdb -rwx------+ 1 Administ mkgroup- 3654594 Feb 21 2003 lib/libcpmt.lib -rwx------+ 1 Administ mkgroup- 18618 Feb 20 2003 lib/mscoree.lib -rwx------+ 1 Administ mkgroup- 69512 Feb 21 2003 lib/oldnames.lib |The incompatible library warnings usually refer to the VC7 version of |MSVCRT.DLL, which M$ say you should distribute with your application in |its install directory, and NOT put in the system. That seems to be the |one that triggers all the license problems. We can avoid this problem by statically linking the provided .lib objects, right? Regards, Olivier _______________________________________________ Ethereal-dev mailing list Ethereal-dev@xxxxxxxxxxxx http://www.ethereal.com/mailman/listinfo/ethereal-dev
- Follow-Ups:
- References:
- Prev by Date: [Ethereal-dev] dissector for DSR
- Next by Date: [Ethereal-dev] PATCH] SIP hidden fields for finding errors (take 3)
- Previous by thread: Re: [Ethereal-dev] Is it possible to build Ethereal with the MSVC++ Toolkit 2003 and nmake 1.5?
- Next by thread: Re: [Ethereal-dev] Is it possible to build Ethereal with the MSVC++Toolkit 2003 and nmake 1.5?
- Index(es):