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

时间:2018-05-13 09:30:08

标签: c++ c visual-studio cgo

这是一个新手问题,但我似乎无法使其发挥作用。

我知道我应该使用CC =,CXX =并且我知道vs编译器名称是cl虽然我不确定它对c ++编译器也是如此。

现在假设编译器名称都是cl,我得到错误: go build CC = cl cxx = cl --buildmode = c-shared -o ../ lib / core.dll

我得到:无法加载包裹:包裹CC = cl:找不到包裹" CC = cl"在任何一个:...

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

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

2 个答案:

答案 0 :(得分:1)

经过几天的游戏后,似乎创建一个可以与visual studio一起使用的库的唯一工作方式是:

  1. 创建.dll(使用cgo with go 1.10 +)
  2. 使用HERE中提到的bat或方法创建一个stub lib来将dll连接到visual studio。

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

答案 1 :(得分:0)

我试图通过最新的go 1.13的Liron方法在Visual Studio中使用cgo。它的工作方式略有不同。我无法使用提取的存根库将dll连接到Visual Studio。相反,我做了一些我不太了解的事情才能使它起作用:

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