Search code examples
c++clinuxbuildandroid-source

ISO C++ forbids declaration of 'int32' with no type


Trying to build an AOSP version and got this error

error: ISO C++ forbids declaration of 'int32' with no type

error: typedef 'int32' is initialized (use decltype instead)

error: 'loc_event_cb_f_type' was not declared in this scope

this is the declaration that throws the error

typedef int32 (loc_event_cb_f_type)(
    rpc_loc_client_handle_type            loc_handle,             /* handle of the client */
    rpc_loc_event_mask_type               loc_event,              /* event mask           */
    const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
);

this is the complete file: /libloc_api-rpc/rpc_inc/loc_api_rpc_glue.h

#ifndef LOC_API_RPC_GLUE_H
#define LOC_API_RPC_GLUE_H

/* Include RPC headers */
#include "rpc_inc/loc_api_common.h"
#include "rpc_inc/loc_api.h"
#include "rpc_inc/loc_api_cb.h"
#include "rpc_inc/loc_api_fixup.h"

#ifdef __cplusplus
extern "C"
{
#endif

/* Boolean */
/* Other data types in comdef.h are defined in rpc stubs, so fix it here */
typedef unsigned char boolean;
#define TRUE 1
#define FALSE 0

extern int loc_api_glue_init(void);
extern int loc_api_null(void);

typedef int32 (loc_event_cb_f_type)(
      rpc_loc_client_handle_type            loc_handle,             /* handle of the client */
      rpc_loc_event_mask_type               loc_event,              /* event mask           */
      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
);

extern rpc_loc_client_handle_type loc_open(
      rpc_loc_event_mask_type       event_reg_mask,
      loc_event_cb_f_type* event_callback
);

extern int32 loc_close
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_start_fix
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_stop_fix
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_ioctl
(
      rpc_loc_client_handle_type           handle,
      rpc_loc_ioctl_e_type                 ioctl_type,
      rpc_loc_ioctl_data_u_type*           ioctl_data
);

#ifdef __cplusplus
}
#endif

#endif /* LOC_API_RPC_GLUE_H */

do you have any idea?


Solution

  • The problem was that int32 was not defined or included anywhere

    as @luserdroog wrote,

    Should it be int32_t?

    int32_t and other intX_t typedefs are defined in /usr/include/stdint.h, so it can be solved by replacing all int32 by int32_t or, as @JonathanLeffler proposed, defining the int32 type, which is more convenient and clean.

    typedef uint32_t uint32;

    but to solve this issue for other files,

    adding this declarations to /usr/include/stdint.h will work

    #ifndef __uint8_defined
    typedef uint8_t uint8;
    # define __uint8_defined
    #endif
    
    #ifndef __int8_defined
    typedef int8_t int8;
    # define __int8_defined
    #endif
    
    #ifndef __uint16_defined
    typedef uint16_t uint16;
    # define __uint16_defined
    #endif
    
    #ifndef __int16_defined
    typedef int16_t int16;
    # define __int16_defined
    #endif
    
    #ifndef __uint32_defined
    typedef uint32_t uint32;
    # define __uint32_defined
    #endif
    
    #ifndef __int32_defined
    typedef int32_t int32;
    # define __int32_defined
    #endif
    
    #ifndef __uint64_defined
    typedef uint64_t uint64;
    # define __uint64_defined
    #endif
    
    #ifndef __int64_defined
    typedef int64_t int64;
    # define __int64_defined
    #endif