http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51113
--- Comment #5 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2011-11-15 08:36:01 UTC --- Take the first error as an example: jsoptparse.i_o:jsoptparse.cpp:function vtable for js::cli::detail::StringOption: warning: relocation refers to discarded section /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.0/../../../../x86_64-pc-linux-gnu/bin/ld: error: hidden symbol '_ZN2js3cli6detail12StringOptionD1Ev' is not defined locally % c++filt _ZN2js3cli6detail12StringOptionD1Ev js::cli::detail::StringOption::~StringOption() This is a virtual destructor that is defined in js/src/shell/jsoptparse.h: struct StringOption : public ValuedOption { const char *value; StringOption(char shortflag, const char *longflag, const char *help, const char *metavar) : ValuedOption(OptionKindString, shortflag, longflag, help, metavar), value(NULL) {} virtual ~StringOption() {} }; This header is included in js/src/shell/jsoptparse.c. And in there you find the following line: StringOption *so = OffTheBooks::new_<StringOption>(1, name, help, (const char *) NULL);