Почему Go не распознает size_t в заголовочном файле C? - PullRequest
1 голос
/ 20 мая 2010

Я пытаюсь написать библиотеку 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 или // #define size_t unsigned long в файл .go до #include, а затем я получаю "gcc произведен без вывода".

Я видел эти вопросы и просмотрел пример безуспешно.

Ответы [ 3 ]

10 голосов
/ 20 мая 2010

Согласно C99, §7.17 , size_t не является встроенным типом, но определено в <stddef.h>.

2 голосов
/ 21 мая 2010

Первоначальная проблема была решена путем добавления #include <stddef.h> - спасибо Кену и Георгу.

Вторая проблема заключалась в том, что мой код Go использовал mydll.mystruct вместо C.mystruct, поэтому пакет C вообще не использовался. В компиляторе cgo была ошибка, которая отображала это сообщение об ошибке, когда пакет C был импортирован и не использовался. Ошибка cgo была исправлена ​​(кем-то еще), чтобы дать более полезное сообщение об ошибке.

Подробности здесь .

1 голос
/ 20 мая 2010

В MSC size_t определяется (среди других мест) в STDDEF.H. Я подозреваю, что именно там вы найдете его и в gcc, поэтому вам нужно добавить ссылку на этот заголовок в исходный код вашей библиотеки (DLL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...