ld: fatal: symbol `__gmpz_abs' is multiply-defined:

Marc Glisse marc.glisse at normalesup.org
Mon Jun 1 19:07:46 CEST 2009


On Mon, 1 Jun 2009, Torbjorn Granlund wrote:

> I cannot follow the various Sun compiler problems, and therefore hope
> you will summarize for me the workarounds that you determine are
> necessary and reasonable.
>
> Whether a bug should be wrked around is a sticky issue.  If it takes a
> #define or two, then it is fine.  But changing the actual library code
> is a losing game, since the envelope of compilable, correct code is
> surely empty.

Except for the weird C++ ambiguity message (which doesn't happen with 
recent versions of the compiler), we are actually talking about gmp bugs 
that are easy to fix.

1) __GMP_EXTERN_INLINE should not be "extern inline". "static inline" 
works fine. "inline" works even better, except on x86_64 when no 
optimization is used (because of a bug). So, your choice whether you 
replace "extern inline" with "inline" (ignore the bug) or just remove 6 
lines (but maybe keep a comment somewhere that "inline" is the right 
value).

2) if you want std::va_list, include cstdarg. If OTOH you want va_list 
(without the std:: in front), include stdarg.h instead. All the files in 
cxx/ currently use stdarg.h except for osdoprnti.cc which has cstdarg and 
would benefit from switching to stdarg.h like the others.

(I stand by what I said in:
http://gmplib.org/list-archives/gmp-bugs/2009-February/001278.html
which would also allow you to remove all the stdarg.h and cstdarg from 
cxx/*)

-- 
Marc Glisse


More information about the gmp-bugs mailing list