[问题] 有关 error: unknown type name 的问题

楼主: datoguo (大头仔)   2022-05-14 17:44:11
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux, CentOS 7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC 4.8.5
问题(Question):
小弟遇到一个 error: unknown type name 问题。恳请大家帮忙。
小弟用 asn1c 把 Wireshark 原始码里面,某个协定的 .asn 编译出解码程式原始码,
它同时也会产出 makefile 。
小弟下 make 编译解码程式时,出现以下错误:
$ make
CC out/libasncodec_la-ProtocolIE-Container.lo
In file included from out/SourceNodeID-Extension.h:15:0,
from out/SourceNodeID.h:16,
from out/ProtocolExtensionField.h:59,
from out/ProtocolExtensionContainer.h:1815,
from out/COUNTvalue.h:50,
from out/Bearers-SubjectToStatusTransfer-Item.h:16,
from out/ProtocolIE-Field.h:19,
from out/ProtocolIE-Container.h:1100,
from out/ProtocolIE-Container.c:8:
out/ProtocolIE-SingleContainer.h:22:1: error: unknown type name
'Bearers_SubjectToStatusTransfer_ItemIEs_t'
typedef Bearers_SubjectToStatusTransfer_ItemIEs_t
ProtocolIE_SingleContainer_127P0_t;
^
于是,我看了 out/ProtocolIE-SingleContainer.h 里面是这样写的:
/* Including external dependencies */
#include "ProtocolIE-Field.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ProtocolIE-SingleContainer */
typedef Bearers_SubjectToStatusTransfer_ItemIEs_t
ProtocolIE_SingleContainer_127P0_t;
其中 Bearers_SubjectToStatusTransfer_ItemIEs_t 其实有宣告在
ProtocolIE-Field.h 里面,
并且 ProtocolIE-Field.h 也有被 ProtocolIE-SingleContainer.h include 。
ProtocolIE-Field.h 里面有 Bearers_SubjectToStatusTransfer_ItemIEs_t 的宣告:
/* ProtocolIE-Field */
typedef struct Bearers_SubjectToStatusTransfer_ItemIEs {
ProtocolIE_ID_t id;
Criticality_t criticality;
struct Bearers_SubjectToStatusTransfer_ItemIEs__value {
Bearers_SubjectToStatusTransfer_ItemIEs__value_PR present;
union Bearers_SubjectToStatusTransfer_ItemIEs__value_u {
Bearers_SubjectToStatusTransfer_Item_t
Bearers_SubjectToStatusTransfer_Item;
} choice;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} value;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} Bearers_SubjectToStatusTransfer_ItemIEs_t;
理论上,像 typedef a b 这种语法,我的理解是宣告 b 是 a 的别名。
也就是说在其他地方宣告:
b x;
意思跟:
a x;
是一样的。
而如果 a 有在其它 .h 里面宣告,而 .h 也有被 include ,
typedef a b 会出现 error: unknown type name 是很奇怪的事。
也可能小弟的理解有误。
小弟能力有限,实在看不出这个错误所在,哪里有问题。
因此,想请问大家有遇过这种问题吗?或能指导小弟此段程式问题出在哪里?
谢谢。
楼主: datoguo (大头仔)   2022-05-14 18:22:00
后来我自己解决了,用 asn1c 最后 release 版本似乎会有问题,但是抓 master 的,就 ok 了可是尽管如此,这问题还是很奇怪。但是因为 master 版build 出来的解码程式可以顺利编译,就暂时可以不管了谢谢大家
作者: OnlyRD (里巷人)   2022-05-15 20:10:00
有循环依赖吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com