Search code examples
c++linuxglibcgmpxeus-cling

How to include libgmp to xeus-cling?


I am trying to run the following code:

#pragma cling add_library_path("/usr/lib/x86_64-linux-gnu")
#pragma cling add_include_path("/usr/include")
#pragma cling add_include_path("/usr/include/x86_64-linux-gnu")
#pragma cling load("/usr/lib/x86_64-linux-gnu/libgmp.so")
#pragma cling load("/usr/lib/x86_64-linux-gnu/libgmpxx.so")
#include <gmpxx.h>

and I get following errors:

In file included from input_line_8:1:
In file included from /usr/include/gmpxx.h:44:
In file included from /usr/include/x86_64-linux-gnu/gmp.h:56:
In file included from /usr/include/limits.h:26:
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:56:5: error: function-like macro '__GLIBC_USE' is not defined
#if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X)
    ^
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:73:5: error: function-like macro '__GLIBC_USE' is not defined
#if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X)
    ^
In file included from input_line_8:1:
In file included from /usr/include/gmpxx.h:44:
In file included from /usr/include/x86_64-linux-gnu/gmp.h:56:
/usr/include/limits.h:145:5: error: function-like macro '__GLIBC_USE' is not defined
#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
    ^

I am trying to include <limits.h> firstly:

#include <limits.h>
#pragma cling add_library_path("/usr/lib/x86_64-linux-gnu")
#pragma cling add_include_path("/usr/include")
#pragma cling add_include_path("/usr/include/x86_64-linux-gnu")
#pragma cling load("/usr/lib/x86_64-linux-gnu/libgmp.so")
#pragma cling load("/usr/lib/x86_64-linux-gnu/libgmpxx.so")
#include <gmpxx.h>

but I still get the error

In file included from input_line_9:1:
In file included from /usr/include/gmpxx.h:44:
In file included from /usr/include/x86_64-linux-gnu/gmp.h:56:
/usr/include/limits.h:145:5: error: function-like macro '__GLIBC_USE' is not defined
#if __GLIBC_USE (IEC_60559_BFP_EXT_C2X)
    ^

How to make <libgmpxx.h> use <limits.h> from xeus-cling, not from /usr/include?


Solution

  • in jupyter:

    #include <stddef.h>    /* for size_t */
    #include <limits.h>
    #define __xeus_cling__
    #pragma cling add_library_path("/usr/lib/x86_64-linux-gnu")
    #pragma cling add_include_path("/usr/include")
    #pragma cling add_include_path("/usr/include/x86_64-linux-gnu")
    #pragma cling load("/usr/lib/x86_64-linux-gnu/libgmp.so")
    #pragma cling load("/usr/lib/x86_64-linux-gnu/libgmpxx.so")
    #include <gmpxx.h>
    

    and in /usr/include/x86_64-linux-gnu/gmp.h

      #include <stddef.h>    /* for size_t */
      #include <limits.h>
    

    replace with

    #ifndef __xeus_cling__
      #include <stddef.h>    /* for size_t */
      #include <limits.h>
    #endif