1 回答
TA贡献1859条经验 获得超6个赞
使用时我得到相同的结果go run main.go,但使用时go build .,您会得到更好的错误:
/tmp/go-build887090083/cgoSO/_obj/hello.o: In function `main':
/usr/include/x86_64-linux-gnu/bits/stdio2.h:104: multiple definition of `main'
/tmp/go-build887090083/cgoSO/_obj/_cgo_main.o:/tmp/go-build887090083/cgoSO/_obj/_cgo_main.c:1: first defined here
collect2: error: ld returned 1 exit status
然后我添加了-work标志以go build保留 tmp 工作区,这是以下内容/tmp/go-build465152107/cgoSO/_obj/_cgo_main.c:
int main() { return 0; }
void crosscall2(void(*fn)(void*, int), void *a, int c) { }
void _cgo_wait_runtime_init_done() { }
char* _cgo_topofstack(void) { return (char*)0; }
void _cgo_allocate(void *a, int c) { }
void _cgo_panic(void *a, int c) { }
void _cgo_reginit(void) { }
第一行写在那里:https : //github.com/golang/go/blob/f2e4c8b5fb3660d793b2c545ef207153db0a34b1/src/cmd/cgo/out.go#L49
并且没有条件,所以无法避免。
结论:您不能导入 C 程序,您只能导入库(这实际上是有道理的)。
如果 C 是您的代码,那么只需更改其他main任何内容即可。
- 1 回答
- 0 关注
- 188 浏览
添加回答
举报