[Ecls-list] deploying ECL built using VC8 on Windows
Goffioul Michael
goffioul at imec.be
Thu Jun 21 08:24:14 UTC 2007
> Just a heads up for Windows users.
>
> If you deploy ECL built with VC8 onto a PC without VC8
> environment (eg.
> VS2005) installed, you may run issues as we did with ECL and
> our own C++ applications.
>
> ECL seems to be built using /MD flag to use the VC runtime
> DLL's and the ecl.exe.manifest file is supposed to aid VC8
> DLL detection (or whatever :)
>
> We have found on a number of PC's simply having the VC8 DLL's
> in system folders was still causing problems.
> Manifest seems to sort it out sometimes, but just now for ECL
> it did not help.
You should consider embedding the manifest into the ecl executable.
Use mt.exe for this: mt -outputresource:ecl.exe -manifest
ecl.exe.manifest.
Then you don't have to distribute the manifest file.
> The application won't start and you get some kind of config
> error and Windows tells you to try reinstalling.
> It seemed a bit random but the following approach sorted it.
>
> So we found the "proper" method of VC8 runtime deployment
> using build-your-own MSI installers.
> This method worked flawlessly for us and we didn't need a
> manifest I think.
>
> The first comment of this link, provides the exact steps to
> create these MSI installers.
> http://msdn2.microsoft.com/en-us/library/zebw5zk9(VS.80).aspx
An alternative method is given here (4th message)
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=164465&SiteID=1
It has the advantage to be a local installation and does not
require admin rights.
> I tried building ECL with /MT flag to statically link in VC8
> runtime, but get piles of compile errors.
Building with /MT is dangerous, especially in DLL, because variables
internal to the runtime are not shared. This is the case for instance
with file handles (FILE*), which cannot be shared between modules
(.exe or .dll) if you compiled the runtime statically.
Michael.
More information about the ecl-devel
mailing list