|
Boost Testing : |
From: Martyn Lovell (martynl_at_[hidden])
Date: 2005-05-26 00:06:09
Hi everyone,
My name's Martyn Lovell and I'm the development lead on the Visual C++
Libraries team at Microsoft. I've been corresponding with Dave on some of the
manifest-related issues you've seen here, and he suggested I post to this
thread to help understand and diagnose the problems.
First let me briefly summarise what manifests are, and why we require them for
all built binaries (EXEs and DLLs) in VC8.
Starting in Windows XP, each Windows binary can have a manifest (which is
really just an XML file), that allows it to bind to a dependency more
precisely than just by a DLL name. This system has a number of advantages,
including enabling us to fix emergency security problems with redistributable
code, and removing previous problems with 'Dll Hell'. I won't spend too much
time extolling the virtues here, but I did want to at least explain a little
of the value of this change.
We've made changes to our compilers, libraries, linker and IDE project system
to make generation of manifests as automatic as possible. But one area where
we do expect manual changes is in makefiles building DLLs (as the boost build
system does).
Because our documentation in beta 2 isn't complete in this area, I'll walk
through the diagnostic steps manually with you.
Generally, after linking a DLL with VC8, you'll see a manifest file next to it
on the disk (foo.dll.manifest). You should use an mt command line to bind this
manifest into the DLL, and this will allow it to find the runtimes it needs.
If you need help, I can give you the exact mt command line you need, though I
think Dave already has this.
If you're seeing problems after this, there are a number of possible causes.
To help me understand what you're seeing, could you tell me exactly what text
is in the Windows error dialog you see when you try to use your DLL? From that
I can ask the next diagnostic questions.
Thanks, and hoping to help
Martyn Lovell
Development Lead
Visual C++ Libraries
[martynl_at_[hidden] / martynl_at_[hidden]]