Не удалось запустить 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