为什么Go似乎没有识别C头文件中的size_t?

时间:2010-05-20 16:37:23

标签: c go

我正在尝试编写一个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没有输出”。

我看过these questions,查看example但没有成功。

3 个答案:

答案 0 :(得分:10)

根据C99,§7.17size_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)源中添加对该标题的引用。