Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从go运行C调用_Go_Cgo_Gccgo - Fatal编程技术网

无法从go运行C调用

无法从go运行C调用,go,cgo,gccgo,Go,Cgo,Gccgo,我正在尝试从go语言代码运行C调用。以下是我正在运行的程序: package main // #include<proxy.h> import "C" import "fmt" func main(){ fmt.Println(C.CMD_SET_ROUTE) } 我正在使用gccgo-5和go版本1.4.2。你能帮我弄清楚到底是什么问题吗?TIA.四件事: 当包含proxy.h时,应该使用双引号,因为它与.go文件位于同一目录中 “C”注释和“C”导入之前不能有空

我正在尝试从go语言代码运行C调用。以下是我正在运行的程序:

package main

// #include<proxy.h>

import "C"
import "fmt"

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}
我正在使用gccgo-5和go版本1.4.2。你能帮我弄清楚到底是什么问题吗?TIA.

四件事:

  • 当包含
    proxy.h
    时,应该使用双引号,因为它与
    .go
    文件位于同一目录中
  • “C”注释和“C”导入之前不能有空行
  • 您在
    proxy.h
    末尾缺少一个
    #endif
  • 在包含
    proxy.h
    之前,需要定义
    CMD\u define
    。否则,Go无法访问静态变量
以下是更正后的代码:

package main

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

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}
\ifndef PROXY\u H
#定义代理服务器
#包括
#ifdef CMD_DEFINE
#定义cmdexport
#否则
#定义cmdexport static
#恩迪夫
cmdexport const int CMD_SET_ROUTE=1;
cmdexport const int CMD_DEL_ROUTE=2;
CMDEPORT const int CMD_STOP=3;
#恩迪夫

我会避免尝试使用gccgo和go1.4.2。坚持使用默认的工具链,直到您对gccgo有特定的需求,以避免增加混乱。您的代码中有很多语法错误。在使用cgo之前,最好先浏览一下博客文章。
pensu@ubuntu:~$ go run test.go 
# command-line-arguments
could not determine kind of name for C.CMD_SET_ROUTE
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