doute7910 2018-11-01 13:05
浏览 84

通过ssh在64位主机上进行32位构建:对象为386,预期为amd64

go env:

set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\IEUser\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\IEUser\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 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\cygwin64\tmp\go-build115470254=/tmp/go-build -gno-record-gcc-switches

In my build script:

$env:CGO_ENABLED = "1"
$env:GOOS = "windows"
$env:GOARCH = "386"
$env:CC = "C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe"

It works fine if I run that PowerShell script directly on the Windows:

powershell.exe : WORK=C:\Users\IEUser\AppData\Local\Temp\go-build363199970

"C:\\Go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build363199970\\b001\\exe\\a.out.exe" -importcfg
"C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build363199970\\b001\\importcfg.link" -buildmode=exe
-buildid=_Pna6rQZInvPOTo6ovpT/eNgRkOxfyIfNEc923MEh/LM048ylaWCky7xp48PwR/_Pna6rQZInvPOTo6ovpT -X ... "-extld=C:\\Qt\\Qt5.11.1\\Tools\\mingw530_32\\bin\\gcc.exe"
"C:\\Users\\IEUser\\AppData\\Local\\go-build\\07\\07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"

"C:\\Go\\pkg\\tool\\windows_amd64\\buildid.exe" -w "C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build363199970\\b001\\exe\\a.out.exe" # internal

mkdir -p C:\Users\IEUser\drone-workspace\

cp $WORK\b001\exe\a.out.exe C:\Users\IEUser\drone-workspace\xx.exe

But if I run it via ssh (using Cygwin), then I got:

WORK=C:\cygwin64\tmp\go-build635580042

"C:\\Go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\cygwin64\\tmp\\go-build635580042\\b001\\exe\\a.out.exe" -importcfg "C:\\cygwin64\\tmp\\go-build635580042\\b001\\importcfg.link" -buildmode=exe -buildid=_Pna6rQZInvPOTo6ovpT/eNgRkOxfyIfNEc923MEh/LM048ylaWCky7xp48PwR/_Pna6rQZInvPOTo6ovpT -X ... "-extld=C:\\Qt\\Qt5.11.1\\Tools\\mingw530_32\\bin\\gcc.exe" "C:\\Users\\IEUser\\AppData\\Local\\go-build\\07\\07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"
C:\Go\pkg\tool\windows_amd64\link.exe: running C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe failed: exit status 1

By using go build -work and re-run the command:

C:\Users\IEUser\AppData\Local\go-build\2c\2c0ce927bab57cfa9fdde5b6dde060141e23f7a5698ed2fcd22b30a961d1701a-d(go.o): object is [windows 386 go1.11.1 X:framepointer] expected [windows amd64 go1.11.1 ]

C:\Go\pkg\tool\windows_amd64\link.exe: C:\Users\IEUser\AppData\Local\go-build\2c\2c0ce927bab57cfa9fdde5b6dde060141e23f7a5698ed2fcd22b30a961d1701a-d: not package main

Why?


Thu Nov 1 22:23:58 +07 2018

So, this command does not work if running via ssh:

"C:\Go\pkg\tool\windows_amd64\link.exe" -o "C:\cygwin64\tmp\go-build635580042\b001\exe\a.out.exe" -importcfg "C:\cygwin64\tmp\go-build635580042\b001\importcfg.link" -buildmode=exe -buildid=_Pna6rQZInvPOTo6ovpT/eNgRkOxfyIfNEc923MEh/LM048ylaWCky7xp48PwR/_Pna6rQZInvPOTo6ovpT "-extld=C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe" "C:\Users\IEUser\AppData\Local\go-build\07\07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"

If I run it directly, a.out.exe is created:

    Directory: C:\cygwin64\tmp\go-build635580042\b001\exe


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        11/1/2018   8:32 AM       28085202 a.out.exe

It may be related to GOARCH when running via Cygwin because if I set GOARCH to 386, then I only got:

IEUser@MSEDGEWIN10 /cygdrive/c/Users/IEUser/drone-workspace
$ go env GOARCH
amd64

IEUser@MSEDGEWIN10 /cygdrive/c/Users/IEUser/drone-workspace
$ export GOARCH=386

IEUser@MSEDGEWIN10 /cygdrive/c/Users/IEUser/drone-workspace
$ cmd.exe /C "C:\\Go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\cygwin64\\tmp\\go-build635580042\\b001\\exe\\a.out.exe" -importcfg "C:\\cygwin64\\tmp\\go-build635580042\\b001\\importcfg.link" -buildmode=exe -buildid=_Pna6rQZInvPOTo6ovpT/eNgRkOxfyIfNEc923MEh/LM048ylaWCky7xp48PwR/_Pna6rQZInvPOTo6ovpT "-extld=C:\\Qt\\Qt5.11.1\\Tools\\mingw530_32\\bin\\gcc.exe" "C:\\Users\\IEUser\\AppData\\Local\\go-build\\07\\07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"
C:\Go\pkg\tool\windows_amd64\link.exe: running C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe failed: exit status 1

How can I continue debug this?


Fri Nov 2 00:03:07 +07 2018

By adding -c (dump call graph) and -v (print link trace) to link.exe:

58.41 host link: "C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe" "-m32" "-mconsole" "-o" "C:\cygwin64\tmp\go-build635580042\b001\exe\a.out.exe" "C:\cygwin64\tmp\go-link-125134263\go.o" "C:\cygwin64\tmp\go-link-125134263\000000.o" "C:\cygwin64\tmp\go-link-125134263\000001.o" "C:\cygwin64\tmp\go-link-125134263\000002.o" "C:\cygwin64\tmp\go-link-125134263\000003.o" "C:\cygwin64\tmp\go-link-125134263\000004.o" "C:\cygwin64\tmp\go-link-125134263\000005.o" "C:\cygwin64\tmp\go-link-125134263\000006.o" "C:\cygwin64\tmp\go-link-125134263\000007.o" "C:\cygwin64\tmp\go-link-125134263\000008.o" "C:\cygwin64\tmp\go-link-125134263\000009.o" "C:\cygwin64\tmp\go-link-125134263\000010.o" "-g" "-O2" "-lrasapi32" "-g" "-O2" "-Wl,-T,C:\cygwin64\tmp\go-link-125134263\fix_debug_gdb_scripts.ld" "-Wl,--start-group" "-lmingwex" "-lmingw32" "-Wl,--end-group" "-lwinmm" "-lws2_32" "-lkernel32"

C:\Go\pkg\tool\windows_amd64\link.exe: running C:\Qt\Qt5.11.1\Tools\mingw530_32\bin\gcc.exe failed: exit status 1

How can I keep all *.o files, so I can re-run that command to see why does it failed?

$ /cygdrive/c/Qt/Qt5.11.1/Tools/mingw530_32/bin/gcc.exe "-m32" "-mconsole" "-o" "C:\\cygwin64\\tmp\\go-build635580042\\b001\\exe\\a.out.exe" "C:\\cygwin64\\tmp\\go-link-125134263\\go.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000000.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000001.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000002.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000003.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000004.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000005.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000006.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000007.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000008.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000009.o" "C:\\cygwin64\\tmp\\go-link-125134263\\000010.o" "-g" "-O2" "-lrasapi32" "-g" "-O2" "-Wl,-T,C:\\cygwin64\\tmp\\go-link-125134263\\fix_debug_gdb_scripts.ld" "-Wl,--start-group" "-lmingwex" "-lmingw32" "-Wl,--end-group" "-lwinmm" "-lws2_32" "-lkernel32"
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\go.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000000.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000001.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000002.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000003.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000004.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000005.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000006.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000007.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000008.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000009.o: No such file or directory
gcc.exe: error: C:\cygwin64\tmp\go-link-125134263\000010.o: No such file or directory

Fri Nov 2 10:54:26 +07 2018

Looks like it's related to Cygwin because running via bash (WSL) works fine:

"C:\\Go\\pkg\\tool\\windows_amd64\\link.exe" -o "C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build132204662\\b001\\exe\\a.out.exe" -importcfg "C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build132204662\\b001\\importcfg.link" -buildmode=exe -buildid=_Pna6rQZInvPOTo6ovpT/eNgRkOxfyIfNEc923MEh/LM048ylaWCky7xp48PwR/_Pna6rQZInvPOTo6ovpT -X ... "-extld=C:\\Qt\\Qt5.11.1\\Tools\\mingw530_32\\bin\\gcc.exe" "C:\\Users\\IEUser\\AppData\\Local\\go-build\\07\\07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"
"C:\\Go\\pkg\\tool\\windows_amd64\\buildid.exe" -w "C:\\Users\\IEUser\\AppData\\Local\\Temp\\go-build132204662\\b001\\exe\\a.out.exe" # internal
mkdir -p C:\Users\IEUser\drone-workspace\
cp $WORK\b001\exe\a.out.exe C:\Users\IEUser\drone-workspace\xx.exe

The problem is: https://github.com/Microsoft/WSL/issues/2138 That's the reason why I have to try Cygwin.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度
    • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
    • ¥15 ETLCloud 处理json多层级问题
    • ¥15 matlab中使用gurobi时报错
    • ¥15 这个主板怎么能扩出一两个sata口
    • ¥15 不是,这到底错哪儿了😭
    • ¥15 2020长安杯与连接网探
    • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么