从 C 调用的 Go 中的整数除法

我可以通过这个程序在 go 中执行整数除法:


package main


import "fmt"


func main() {

 a := 10

 b := 5

    fmt.Println(a/b)

}

然后我在 go 中做了一个程序,它有 +、-、* 和 / 的函数。我用 C 编写了一个程序,它调用每个函数并执行算术运算。除了除法外,代码工作正常。


带有函数的 go 文件是:(calc.go)


package main


func Add(a, b int) int {

    return a + b

}

func Sub(a, b int) int {

    return a - b

}

func Mul(a, b int) int {

    return a * b

}

func Div(a, b int) int {

    return a / b

}

调用这些函数的 C 程序是:(calcc.c)


#include <stdio.h>


extern int go_add(int, int) __asm__ ("main.Add");

extern int go_sub(int, int) __asm__ ("main.Sub");

extern int go_mul(int, int) __asm__ ("main.Mul");

extern int go_div(int, int) __asm__ ("main.Div");


int menu()

{

  int op;

  printf("\n1 add");

  printf("\n2 sub");

  printf("\n3 mul");

  printf("\n4 div");

  printf("\nEnter your choice : ");

  scanf("%d", &op);

  return op;

}

int main() {



  int op, ch, result, a, b;


  do{ 

    op= menu();


    printf("First number  : ");

    scanf("%d", &a);

    printf("Second number : ");

    scanf("%d", &b);


    switch(op)

    {

       case 1:

        result = go_add(a, b);

    printf("Result : %d" , result);

        break;

       case 2:

        result = go_sub(a, b);

    printf("Result : %d" , result);

        break;

       case 3:

        result = go_mul(a, b);

    printf("Result : %d" , result);

    break;

       case 4:

        result = go_div(a, b);

    printf("Result : %d" , result);

    break;

       default:

        printf("Invalid choice ! ");

    }

    printf("\nAnother operation? (1 if yes) : ");

    scanf("%d", &ch);

  } while(ch==1);

  printf("\nThank you!");

}

我使用以下命令在终端上编译:


gccgo -c calc.go


gcc calc.o calcc.c -o main


并收到此错误:未定义对`__go_runtime_error' collect2 的引用:错误:ld 返回 1 个退出状态


我应该如何解决这个问题?


慕斯王
浏览 243回答 2
2回答

倚天杖

您需要使用gccgo而不是与正常链接gcc。普通的 gcc 不知道它应该链接到 go 运行时(libgo)。根据您的配置,您可能还需要指定运行时库的位置。例如,通过静态嵌入它或使其在LD_LIBRARY_PATH环境变量中可用。例子:gccgo&nbsp;-static-libgo&nbsp;calc.o&nbsp;calcc.o&nbsp;-o&nbsp;main有关更多信息,请检查设置和使用 gccgo。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go