Не удалось запустить C Call от Go

Я пытаюсь запустить C-вызов из го кода языка. Вот программа, которую я запускаю:

package main

// #include<proxy.h>

import "C"
import "fmt"

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}

Вот содержимое файла proxy.h:

#ifndef PROXY_H
#define PROXY_H

#include <netinet/in.h>

#ifdef CMD_DEFINE
#   define cmdexport
#else
#   define cmdexport static
#endif

cmdexport const int CMD_SET_ROUTE = 1;
cmdexport const int CMD_DEL_ROUTE = 2;
cmdexport const int CMD_STOP      = 3;

Вот ошибка, которую я получаю при попытке запустить эту программу:

pensu@ubuntu:~$ go run test.go 
# command-line-arguments
could not determine kind of name for C.CMD_SET_ROUTE

Я использую gccgo-5 и перейти на версию 1.4.2. Не могли бы вы помочь мне выяснить, в чем именно проблема здесь? ТИА.

1 ответ

Решение

Четыре вещи:

  • Вы должны использовать двойные кавычки при включении proxy.h, поскольку он находится в том же каталоге, что и ваш .go файл.
  • Перед комментарием "C" и импортом "C" не может быть пустой строки.
  • Вам не хватает #endif в конце proxy.h,
  • Вам нужно определить CMD_DEFINE перед включением proxy.h, В противном случае Go не сможет получить доступ к статической переменной.

Ниже приведен исправленный код:

package main

// #define CMD_DEFINE
// #include "proxy.h"
import "C"
import "fmt"

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}
#ifndef PROXY_H
#define PROXY_H

#include <netinet/in.h>

#ifdef CMD_DEFINE
#   define cmdexport
#else
#   define cmdexport static
#endif

cmdexport const int CMD_SET_ROUTE = 1;
cmdexport const int CMD_DEL_ROUTE = 2;
cmdexport const int CMD_STOP      = 3;

#endif
Другие вопросы по тегам