On 08/09/2011 4:17 PM, Frédéric Bron wrote:
In my experience, these sorts of errors arise when there really is something
wrong with the code, usually involving sizes of integers (e.g. 'long' in
struct's definition and 'int' in another, on a 64-bit machine). However, the
linker is poorly-equipped to detect such errors unless the resulting objects
have different sizes.
So, while I wouldn't rule out miscompilation, I would first check for
silently conflicting definitions in different compilation units.
Does the linker message gives any hint on where to look?
Sort of... the error message mentions Test.o and the section
`.rdata$_ZTISs'
You also presumably have the linker command line, which should tell you
what other .o and .a are involved. Invoke `objdump -h' and pass as args
all those .o/.a and examine the output. Most likely you'll see several
files containing the offending section, and among those there are
probably two distinct sizes reported. From there you have to work
backwards to figure out what was different about #defines and #includes
in the two source files that might have caused the discrepancy.
Top suspects: custom typedefs or #defines which confuse system headers,
or including Windows headers which make superficially equivalent
declarations (but which have completely different and incompatible
implementations). Given that mingw doesn't complain my money's on the
latter.
Ryan
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple