无法从 go 运行 C 调用

我正在尝试从 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 版。你能帮我弄清楚这里到底是什么问题吗?TIA。


叮当猫咪
浏览 186回答 1
1回答

MMMHUHU

四件事:您应该在包含时使用双引号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(){&nbsp; &nbsp; fmt.Println(C.CMD_SET_ROUTE)}#ifndef PROXY_H#define PROXY_H#include <netinet/in.h>#ifdef CMD_DEFINE#&nbsp; &nbsp;define cmdexport#else#&nbsp; &nbsp;define cmdexport static#endifcmdexport const int CMD_SET_ROUTE = 1;cmdexport const int CMD_DEL_ROUTE = 2;cmdexport const int CMD_STOP&nbsp; &nbsp; &nbsp; = 3;#endif
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go