我正在尝试从 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#endifcmdexport 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-argumentscould not determine kind of name for C.CMD_SET_ROUTE我正在使用 gccgo-5 并使用 1.4.2 版。你能帮我弄清楚这里到底是什么问题吗?TIA。
1 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
四件事:
您应该在包含时使用双引号
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
- 1 回答
- 0 关注
- 185 浏览
添加回答
举报
0/150
提交
取消