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

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

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

Go
慕斯王 2021-09-21 22:14:06
我可以通过这个程序在 go 中执行整数除法:package mainimport "fmt"func main() { a := 10 b := 5    fmt.Println(a/b)}然后我在 go 中做了一个程序,它有 +、-、* 和 / 的函数。我用 C 编写了一个程序,它调用每个函数并执行算术运算。除了除法外,代码工作正常。带有函数的 go 文件是:(calc.go)package mainfunc 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 个退出状态我应该如何解决这个问题?
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

您需要使用gccgo而不是与正常链接gcc。普通的 gcc 不知道它应该链接到 go 运行时(libgo)。

根据您的配置,您可能还需要指定运行时库的位置。例如,通过静态嵌入它或使其在LD_LIBRARY_PATH环境变量中可用。例子:

gccgo -static-libgo calc.o calcc.o -o main

有关更多信息,请检查设置和使用 gccgo


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

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