Я использовал компилятор osmocom asn1c (ветвь апер-префикса), чтобы получить реализацию протоколов GSM_MAP и TCAP.Каждый протокол был успешно скомпилирован.Но при использовании обоих в одном проекте возникает следующая ошибка:
src/tcap/src/ErrorCode.c:35:20: error: ‘union ErrorCode_u’ has no member named ‘nationaler’
{ ATF_NOFLAGS, 0, offsetof(struct ErrorCode, choice.nationaler),
^
src/tcap/src/ErrorCode.c:44:20: error: ‘union ErrorCode_u’ has no member named ‘privateer’
{ ATF_NOFLAGS, 0, offsetof(struct ErrorCode, choice.privateer),
Я полагаю, что проблема заключается в конфликтах имен файлов на языке C, потому что существует одинаковая структура имен с разными определениями в двухразличные C-файлы (например, ErrorCode.h
, который используется в обоих протоколах)
/* ErrorCode structure which is defined in GSM_MAP protocol*/
#ifndef _ErrorCode_H_
#define _ErrorCode_H_
......
typedef struct ErrorCode {
ErrorCode_PR present;
union ErrorCode_u {
long localValue;
OBJECT_IDENTIFIER_t globalValue;
} choice;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} ErrorCode_t;
.....
#endif /* _ErrorCode_H_ */
/* ErrorCode structure which is defined in TCAP protocol*/
#ifndef _ErrorCode_H_
#define _ErrorCode_H_
.......
typedef struct ErrorCode {
ErrorCode_PR present;
union ErrorCode_u {
long nationaler;
long privateer;
} choice;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} ErrorCode_t;
......
#endif /* _ErrorCode_H_ */
Поэтому попробуйте решить проблему, используя osmocom PREFIX :
ASN1C_PREFIX="TCAP_" asn1c -fcompound-names DialoguePDUs.asn tcap.asn UnidialoguePDUs.asn
Однако компилятор сообщает о следующей синтаксической ошибке:
FATAL: Cannot dereference dialogueRequest at line 13
FATAL: Cannot compile "TCAP_DialoguePDU" (21:1) at line 13
FATAL: Cannot compile "TCAP_DialoguePDU" (21:1) at line 13
Кто-нибудь знает об этой проблеме и возможном решении?