如何使用 visual studio 编译器构建带有 cgo 的库?

How to build a library with cgo using visual studio compiler?

这是个新手问题,但我似乎做不出来。

我知道我应该使用 CC=、CXX=,我知道 vs 编译器的名称是 cl,但我不确定它是否也适用于 c++ 编译器。

现在假设两者的编译器名称都是 cl 我得到错误: 去构建 CC=cl cxx=cl --buildmode=c-shared -o ../lib/core.dll

我得到:无法加载包:包 CC=cl:无法在任何以下位置找到包 "CC=cl":...

另一方面,如果我尝试在没有 CC / CXX 选项的情况下进行编译,那么一切正常。

所以总结一下: 1. vs 的c 和c++ 编译器名称是什么? 2. 为什么我在尝试选择要使用的编译器时出现错误?

经过几天的尝试,似乎创建可与 visual studio 一起使用的库的唯一可行方法是:

  1. 创建一个 .dll(在 go 1.10+ 中使用 cgo)
  2. 使用bat文件或HERE中提到的方法创建存根库以将dll连接到visual studio。

    • 旁注,也可以使用 loadlibrary func(我没有尝试,因为我试图避免使用这种方法,因为它似乎不是推荐的方法)。

我尝试在 visual studio 中使用最新的 go 1.13 中的 cgo 和 Liron 的方法。它的工作方式有点不同。我无法使用提取的存根库将 dll 连接到 visual studio。相反,我做了一些我不太明白的事情来让它工作:

  1. 使用 c 共享构建模式创建 .dll(使用 go 1.13 和 gcc 编译器)。
  2. 使用 c-archive 构建模式创建 .lib。
  3. 使用.lib编译,使用.dll访问所有功能。如果我直接使用.lib,访问时所有功能都会停止。如果我使用从 dll 中提取的存根库,程序甚至无法成功加载。