我试图从go语言代码运行C调用.这是我正在运行的程序:
package main
// #include<proxy.h>
import "C"
import "fmt"
func main(){
fmt.Println(C.CMD_SET_ROUTE)
}
Run Code Online (Sandbox Code Playgroud)
这是文件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;
Run Code Online (Sandbox Code Playgroud)
现在,这是我在尝试运行该程序时遇到的错误:
pensu@ubuntu:~$ go run test.go
# command-line-arguments
could not determine kind of name for C.CMD_SET_ROUTE
Run Code Online (Sandbox Code Playgroud)
我正在使用gccgo-5并使用版本1.4.2.你能帮我解决一下究竟是什么问题吗?TIA.
四件事:
proxy.h,因为它与.go文件位于同一目录中.#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)
}
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)