在GO中使用其他语言的库

and*_*asm 2 c++ go

这可能看起来像一个愚蠢的问题,但是可以在GO中编写一个可以从其他语言调用的库,例如C++吗?

zzz*_*zzz 6

不幸的是,这不是直接的("可以被称为").平台的C实现定义了一些问题(对于大多数/所有官方支持的平台):

  • 调用约定是不一样的:例如,Go函数/方法不使用任何寄存器作为返回值(如果有的话).
  • 执行模型不同:使用拆分堆栈.
  • 垃圾收集器可能会被进程拥有的内存弄糊涂,但不会被GC"注册"为"不可收集"或特别标记(用于精确收集).
  • Go运行时的初始化是一个问题.它希望在此过程中的任何其他事情之前完成.如果要与多个Go .so链接,则不存在用于协调初始化的现成机制.

以上所有都适用于'gc'."gccgo"在一定程度上放松了.有关C CInteroperability的更多信息.