Re: [DynInst_API:] Compile issue building Dyninst on ORNL titan


Date: Fri, 17 Oct 2014 20:17:29 -0700
From: Jim Galarowicz <jeg@xxxxxxxxxxxxx>
Subject: Re: [DynInst_API:] Compile issue building Dyninst on ORNL titan
Hi Josh,

Thanks for the reply. I haven't been able to figure anything out. This must be unique to Titan? It seems no one else has had this issue?

I tried looking along the include path.

39%] Building CXX object dyninstAPI/CMakeFiles/dyninstAPI.dir/src/BPatch.C.o In file included from /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/headers.h:53:0, from /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/Timer.h:43, from /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/stats.h:38, from /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/dyninstAPI/src/BPatch.C:43: /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/fraction.h: In constructor 'fraction::fraction(int64_t)': /ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/Types.h:140:28: error: 'INT64_C' was not declared in this scope
 #define I64_C(x)  INT64_C(x)
                            ^
/ccs/home/jgalaro/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src/fraction.h:59:50: note: in expansion of macro 'I64_C'
   explicit fraction(int64_t n) : numer(n), denom(I64_C(1))  {

I didn't see any includes of stdint.h in the include trace above when I examined each of the files.

jgalaro@titan-ext1:~/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src> grep stdint *.h
Types.h:#include <stdint.h>
Types.h:#include <stdint.h>
Types.h:#include <stdint.h>
Types.h:#include <stdint.h>
jgalaro@titan-ext1:~/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/common/src> cd ../../dyninstAPI/src jgalaro@titan-ext1:~/OpenSpeedShop_ROOT/BUILD/titan-ext1/dyninst-8.2.0/dyninstAPI/src> !gre
grep stdint *.h

I'm dead in the water on Titan. I've built Dyninst here many times. I tried the pre-release 8.2 version I had and that fails in the same way.
They have upgraded the system since then.

I'll try again tomorrow.

Thanks,
Jim G

On 10/17/2014 02:58 PM, Josh Stone wrote:
On 10/17/2014 02:25 PM, Jim Galarowicz wrote:
I'm not sure if the patchAPI compile options have the correct defines
set or is there a compile option that is required to get the constants
recognized?
I put the #include stdint.h into BPatch.C to see if the Dyninst build
was missing including stdint.h because it is enclosed in some if
<defined> type code.
So, I'm guessing there is an missing option or missing compiler define
that is needed.

  From stdint.h on Titan:

/* The ISO C99 standard specifies that in C++ implementations these
     macros should only be defined if explicitly requested.  */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
Yet common/src/Types.h ensures __STDC_LIMIT_MACROS is defined in every
case before including stdint.h.

I would guess there's a problem in the #include order.  As in, something
that precedes Types.h is indirectly including stdint.h, when
__STDC_LIMIT_MACROS isn't defined yet.  Then when Types.h gets around to
it, the _STDINT_H guards are already set, so it does nothing.

[← Prev in Thread] Current Thread [Next in Thread→]