go 在与VS2015链接时,'_rt0_amd64_windows_lib'没有被调用,

pdkcd3nj  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(42)

你使用的Go版本是什么( go version )?

go version go1.11.5 windows/amd64

这个问题在最新版本的发布中是否重现?

是(go1.11.5)

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Andreas Jonsson\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\Andreas Jonsson\go
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\ANDREA~1\AppData\Local\Temp\go-build314745786=/tmp/go-build -gno-record-gcc-switches

你做了什么?

在Windows上使用Go1.11.5和TDM-GCC-64(mingw64)编译任何包,并使用VisualStudio 2015将库链接到一个小型应用程序中,并调用库中的任何C导出的Go函数。

你期望看到什么?

函数应该像应用程序使用Mingw构建时一样被执行。

你看到了什么?

当调用该函数时,应用程序陷入死锁,因为运行时等待srcruntime\cgo\gcc_libinit_windows.c:77中的'runtime_init_wait'对象。如果你使用VisualStudio 2015进行链接,看起来_rt0_amd64_windows_lib永远不会被调用(我怀疑后续版本也有同样的问题)。我还注意到在构建过程中有一个警告:“main.a(go.o) : warning LNK4078: 发现具有不同属性的多个'.text'部分”(60600060),我不确定这是否是问题的原因...?

83qze16e

83qze16e1#

使用Visual Studio 2015将库与一个小应用程序链接
我可能错了,但我认为这不被支持。Go只在Windows上支持GCC C编译器。
Alex

l7mqbcuq

l7mqbcuq2#

是的,那可能是个问题。:(
如果我们能添加对它的支持就很有趣了。不确定这需要多少工作?
我想这个问题与存档中的全局构造函数没有被VS链接器识别有关。作为一个测试,我尝试手动调用它。没用。:)但我不确定_rt0_amd64_windows_lib在寄存器设置等方面期望什么。
@dmitshur 所以也许这应该是一个标签问题?有人知道要做什么才能让它起作用吗?(即使可能也不可能。)

62o28rlo

62o28rlo3#

如果我们能为其添加支持,那将是很有趣的。不确定这需要多少工作?
我不知道。抱歉。
这里有一个可能与此相关的#20982
Alex

yvt65v4c

yvt65v4c4#

非常感谢。我一定错过了那个。

它相关。我没有尝试使用 MSVC 工具构建所有内容,但是如果 #20982 被合并,那对我的情况将是非常有帮助的。

谢谢

相关问题