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