为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 go 运行 C 调用

无法从 go 运行 C 调用

Go
叮当猫咪 2021-10-25 16:11:48
我正在尝试从 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


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信