我正在尝试编写一个go库,它将充当C库的前端。如果我的一个C结构包含size_t
,我会收到编译错误。 AFAIK size_t
是一个内置的C类型,所以为什么不去识别呢?
我的标题文件如下:
typedef struct mystruct
{
char * buffer;
size_t buffer_size;
size_t * length;
} mystruct;
我得到的错误是:
gcc failed:
In file included from <stdin>:5:
mydll.h:4: error: expected specifier-qualifier-list before 'size_t'
on input:
typedef struct { char *p; int n; } _GoString_;
_GoString_ GoString(char *p);
char *CString(_GoString_);
#include "mydll.h"
我甚至尝试在// typedef unsigned long size_t
之前的.go文件中添加// #define size_t unsigned long
或#include
,然后我得到“gcc没有输出”。
答案 0 :(得分:10)
根据C99,§7.17,size_t
不是内置类型,而是在<stddef.h>
中定义。
答案 1 :(得分:2)
通过添加#include <stddef.h>
来解决原始问题 - 感谢Ken和Georg。
第二个问题是我的Go代码使用的是mydll.mystruct
而不是C.mystruct
,因此根本没有使用C包。 cgo编译器中有一个错误,在导入和未使用C包时显示此错误消息。已修复cgo错误(由其他人修改)以提供更有用的错误消息。
详情为here。
答案 2 :(得分:1)
在MSC中,size_t在STDDEF.H中定义(以及其他地方)。我怀疑你也可以在gcc中找到它,所以你需要在库(DLL)源中添加对该标题的引用。