无法 运行 从 go 调用 C
Not able to run C call from go
我正在尝试 运行 来自 go 语言代码的 C 调用。这是我 运行ning:
的程序
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。你能帮我弄清楚这里到底是什么问题吗? TIA.
四件事:
- 包含
proxy.h
时应使用双引号,因为它与 .go
文件位于同一目录中。
- 在您 "C" 注释和 "C" 导入之前不能有空行。
- 您在
proxy.h
末尾缺少一个 #endif
。
- 您需要在包含
proxy.h
之前定义 CMD_DEFINE
。否则,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
我正在尝试 运行 来自 go 语言代码的 C 调用。这是我 运行ning:
的程序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。你能帮我弄清楚这里到底是什么问题吗? TIA.
四件事:
- 包含
proxy.h
时应使用双引号,因为它与.go
文件位于同一目录中。 - 在您 "C" 注释和 "C" 导入之前不能有空行。
- 您在
proxy.h
末尾缺少一个#endif
。 - 您需要在包含
proxy.h
之前定义CMD_DEFINE
。否则,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