Thanks for the quick reply!
The gmp.h is indeed indirectly included as extern "C" {[...]} - in fact,
RELIC requires being included that way. Did I understand you correctly,
that this would be a problem for GMP? Or is being included as C
/necesary/ for GMP?
I'm already in contact with the RELIC authors, if this is the issue I'm
sure I will find a solution for fixing that together with them.
Am 26.05.21 um 10:31 schrieb Marc Glisse:
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.
_______________________________________________
gmp-bugs mailing list
[email protected]
https://gmplib.org/mailman/listinfo/gmp-bugs