作者datoguo (大头仔)
看板C_and_CPP
标题[问题] 有关 error: unknown type name 的问题
时间Sat May 14 17:44:11 2022
开发平台(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 是很奇怪的事。
也可能小弟的理解有误。
小弟能力有限,实在看不出这个错误所在,哪里有问题。
因此,想请问大家有遇过这种问题吗?或能指导小弟此段程式问题出在哪里?
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.252.179 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1652521453.A.E52.html
1F:→ datoguo: 後来我自己解决了,用 asn1c 最後 release 版本似乎会有 05/14 18:22
2F:→ datoguo: 问题,但是抓 master 的,就 ok 了 05/14 18:22
3F:→ datoguo: 可是尽管如此,这问题还是很奇怪。但是因为 master 版 05/14 18:22
4F:→ datoguo: build 出来的解码程式可以顺利编译,就暂时可以不管了 05/14 18:23
5F:→ datoguo: 谢谢大家 05/14 18:23
6F:推 OnlyRD: 有循环依赖吗? 05/15 20:10