我可以通过这个程序在 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程序是:(calccc.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' 的 undefined reference collect2:错误:ld 返回 1 退出状态
我应该如何解决这个问题?
最佳答案
您需要使用 gccgo
进行链接,而不是使用普通的 gcc
。普通 gcc 不知道它应该链接到 go 运行时 (libgo)。
根据您的配置,您可能还需要指定可以找到运行时库的位置。例如,通过静态嵌入它或使其在 LD_LIBRARY_PATH
环境变量中可用。
示例:
gccgo -static-libgo calc.o calcc.o -o main
更多信息,查看Setting up and using gccgo .
关于go - 从 C 调用的 Go 中的整数除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29160464/