Build error using pre-packaged GMP

Marc Glisse marc.glisse at inria.fr
Wed May 26 08:31:27 UTC 2021


On Mon, 24 May 2021, Philip Höbler wrote:

> Dear GMP people,
>
> first of all, thank you for building this awesome project! I have an 
> issue using it however, and I am mostly clueless why. Some information 
> on that:
>
> - I'm using GMP as part of the RELIC library (that is, configuring RELIC 
> to use gmp), in a C++ project
>
> - System: Fedora 34, x86_64, pre-packaged versions of gmp and gmp-devel 
> (both 6.2.0: gmp-6.2.0-6.fc34.src.rpm) used
>
> - The library is correctly linked as far as I can tell, and no special 
> build parameters are used by the RELIC Makefiles
>
>
> The error I'm encountering seems to be conflicting declarations within 
> the gmp-x86_64.h header (which is what stuns me, as it is from my view 
> pretty much guaranteed to be coherent internally...). The gcc error 
> output is:
>
> In file included from /usr/include/gmp.h:59,
>                  from [project]/relic/include/relic_types.h:40,
>                  from [project]/relic/include/relic_arch.h:39,
>                  from [project]/relic/include/relic.h:81,
>                  from [project headers...]
> /usr/include/gmp-x86_64.h:2286:33: error: conflicting declaration of C 
> function 'std::ostream& operator<<(std::ostream&, mpq_srcptr)'
>  2286 | __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, 
> mpq_srcptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2285:33: note: previous declaration 
> 'std::ostream& operator<<(std::ostream&, mpz_srcptr)'
>  2285 | __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, 
> mpz_srcptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2287:33: error: conflicting declaration of C 
> function 'std::ostream& operator<<(std::ostream&, mpf_srcptr)'
>  2287 | __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, 
> mpf_srcptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2285:33: note: previous declaration 
> 'std::ostream& operator<<(std::ostream&, mpz_srcptr)'
>  2285 | __GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, 
> mpz_srcptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2289:33: error: conflicting declaration of C 
> function 'std::istream& operator>>(std::istream&, mpq_ptr)'
>  2289 | __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, 
> mpq_ptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2288:33: note: previous declaration 
> 'std::istream& operator>>(std::istream&, mpz_ptr)'
>  2288 | __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, 
> mpz_ptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2290:33: error: conflicting declaration of C 
> function 'std::istream& operator>>(std::istream&, mpf_ptr)'
>  2290 | __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, 
> mpf_ptr);
>       |                                 ^~~~~~~~
> /usr/include/gmp-x86_64.h:2288:33: note: previous declaration 
> 'std::istream& operator>>(std::istream&, mpz_ptr)'
>  2288 | __GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, 
> mpz_ptr);
>
> I tried building a minimal example replicating this issue, but couldn't 
> achieve that. My hope is that someone of you has encountered this before 
> or can tell by pure experience where the issue may be...
>
> If anyone of you had an idea what the issue may be, I'd be very grateful 
> to hear that! In case I can assist you with any more information, please 
> let me know.

My first guess would be some misguided

extern "C" {
#include <gmp.h>
}

(possibly indirectly)

You would have a better chance asking the relic people, or the authors of 
whatever code using relic you are compiling.

-- 
Marc Glisse


More information about the gmp-bugs mailing list