首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从go运行C调用

无法从go运行C调用
EN

Stack Overflow用户
提问于 2015-07-21 13:48:32
回答 1查看 553关注 0票数 3

我正在尝试从go语言代码中运行一个C调用。下面是我正在运行的程序:

代码语言:javascript
复制
package main

// #include<proxy.h>

import "C"
import "fmt"

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}

以下是文件代理的内容:

代码语言:javascript
复制
#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;

现在,下面是我在尝试运行该程序时遇到的错误:

代码语言:javascript
复制
pensu@ubuntu:~$ go run test.go 
# command-line-arguments
could not determine kind of name for C.CMD_SET_ROUTE

我正在使用gccgo-5和go版本1.4.2。你能帮我弄清楚到底是什么问题吗?蒂娅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-21 14:01:26

四件事:

  • 当包含proxy.h时,您应该使用双引号,因为它与.go文件驻留在同一个目录中。
  • 在您的"C“注释和"C”导入之前不能有空行。
  • 您在#endif末尾缺少了一个proxy.h
  • 在包含CMD_DEFINE之前,需要定义proxy.h。否则,Go无法访问静态变量。

以下是修正后的代码:

代码语言:javascript
复制
package main

// #define CMD_DEFINE
// #include "proxy.h"
import "C"
import "fmt"

func main(){
    fmt.Println(C.CMD_SET_ROUTE)
}
代码语言:javascript
复制
#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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31540974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档