32-битная сборка на 64-битном хосте через ssh: объект 386, ожидаемый amd64 - PullRequest
0 голосов
/ 01 ноября 2018

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

В моем скрипте сборки:

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

Работает нормально, если я запускаю этот скрипт PowerShell непосредственно в 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

Но если я запускаю его через ssh (используя Cygwin), то получаю:

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

С помощью go build -work и повторно запустить команду:

C: \ Users \ IEUser \ AppData \ Local \ go-build \ 2c \ 2c0ce927bab57cfa9fdde5b6dde060141e23f7a5698ed2fcd22b30a961d1701a-d ( go .o): объект является [Windows 386: объект X1: Go1.11) amd64 go1.11.1]

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

Почему?


Чт 1 ноября 22:23:58 +07 2018

Итак, эта команда не работает при запуске через 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 / _Pna \ q \ \ q \ t_0_t_0_0 \ \} \ \ q_t_0_0_2_ \ q \ q_t_0_1_ \ q_t_0_2_0_ \ q_t_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_2_0_0_0_0_0_0_0_0_5_5_5_5_5_5_5_5_5_2 "C: \ Users \ IEUser \ AppData \ Local \ гоу-сборки \ 07 \ 07d3feb4ac36b40e45669e164e0565963f209a2510b6f11f5237d6d554c024e3-d"

Если я запускаю его напрямую, создается a.out.exe:

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


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

Это может быть связано с GOARCH при работе через Cygwin, потому что если я установлю GOARCH на 386, то получу только:

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

Как мне продолжить отладку этого?


Пт 2 ноября 00:03:07 +07 2018

Путем добавления -c (график вызовов дампа) и -v (трассировка ссылки на печать) к link.exe:

58.41 ссылка на хост: "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: запуск C: \ Qt \ Qt5.11.1 \ Tools \ mingw530_32 \ bin \ gcc.exe: сбой: выход из состояния 1

Как мне сохранить все *.o файлы, чтобы я мог повторно запустить эту команду, чтобы увидеть, почему она не удалась?

$ /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

Пт, 2 ноября 10:54:26 +07 2018

Похоже, это связано с Cygwin, потому что работа через bash (WSL) работает нормально:

"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

Проблема: https://github.com/Microsoft/WSL/issues/2138 Вот почему я должен попробовать Cygwin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...