Re: Really bizarre linking error!
* bajichuan@hotmail.com:
Hello! I have the world's strangest linking error, and I'm hoping that
someone can help me sort it out. I recently installed and compiled a
library called LinBox without a problem. I have an object-oriented
software application, and I want it to call the library. When I add
the following 3 lines (copied directly from the library tutorial),
#include <linbox/field/modular.h>
using namespace LinBox;
typedef Modular<short> Field;
to a .cpp file, my code compiles perfectly. However, when I add the
same 3 lines to a .h file (where they *must* ultimately go), I get
(among others) the following error:
/tmp/cckvjpY5.o: In function `~edge':/usr/include/gmp.h:1590: multiple
definition of
`LinBox::ModularBase<Integer>::write(std::basic_ostream<char,
std::char_traits<char> >&) const'
This is not a linker error, it's a multiple definition.
That means you have defined something twice or more.
Guess what? Hint: read the error message.
Comments? This is incredibly strange to me. It looks like some sort of
linking error. Namespace conflict? I don't have root access on the
school machines, and so I have compiled and am pointing to a local
copy of the LinBox library. This is so strange... why does the code
work from
the .cpp file but not the .h file?
Because you have managed to include the header file in the same cpp file
twice, or you have included the header file in the cpp file where you
manually placed the typedef.
It may or may not be relevant to mention include guards (google).
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?