I'm building a DLL using VC++8 (Visual Studio 2005). Let's call it Dll-A. It gets linked to the symbols library for another DLL (let's call it Dll-B). My Debug version builds fine but when I try to build the Release version I get a couple of unresolved externals. I used DUMBIN to show me what was in Dll-B. I dumped both the Debug version and Release version and expected to find a couple of missing functions in the Release version. But in fact, both builds had the same exported functions.

Interestingly, I can link the Release build of Dll-A to the Debug build for Dll-B so I figured there might be some kind of name mangling difference for the functions that can't be found. I viewed them in a Differ and here's what I found:-

DEBUG version of Dll-B (a dump of one particular function)
70 45 0000137A ?connect@signal_base@sigc@@IAE?AV?$_Iterator@$00@?$list@Vslot_base@sigc

RELEASE version of Dll-B (a dump of the corresponding function in my Release build)
70 45 000017F0 ?connect@signal_base@sigc@@IAE?AV?$_Iterator@$0A@@?$list@Vslot_base@sigc
Each actual entry is a lot longer than that. I've only shown the first bit of the line as an example. Notice the sections highlighted in blue. Wherever there's a function that can't be found, the function signature is subtlely different, as highlighted. Does anyone know what the difference means? I can't see any obvious difference in the project's settings - expect for the usual stuff such as the Release version being optimized and not having any Debug information. But the settings are all the ones that I normally use and I've never had this problem before...