我可以通过该程序执行整数除法:
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退出状态
我该如何解决?
您需要使用gccgo而不是normal 链接gcc。普通的gcc不知道应该链接到go运行时(libgo)。
gccgo
gcc
根据您的配置,您可能还需要指定可以在哪里找到运行时库。例如,通过将其静态嵌入或使其在LD_LIBRARY_PATH环境变量中可用。例:
LD_LIBRARY_PATH
gccgo -static-libgo calc.o calcc.o -o main
有关更多信息,请检查设置和使用gccgo。