Может кто-нибудь подсказать, почему сборка Go из source (1.4) дает сбой из-за ошибки компиляции GCC, даже если CGO_ENABLED = 0 - PullRequest
0 голосов
/ 19 сентября 2019

В файле make.bat, найденном в go / src (после распаковки tar), есть команда компиляции gcc даже до того, как когда-либо использовалась проверка на CGO_ENABLED.Это портит сборку средства начальной загрузки.

Из соображений безопасности я не могу установить GCC на Windows через cygwin или ming.Тем не менее, компиляции предназначены для различных файлов .c, что заставляет меня не знать, что делать дальше.

Я возился с исходным кодом и переменными среды, особенно CGO_ENABLED, которые должны были быть всем, что мне нужно,Тем не менее, make.bat имеет тот раздражающий маленький компилятор c, который, кажется, сбивает меня с толку.

Это файл make.bat и компиляция, которая отбрасывает меня:

:: CGO_ENABLED: Controls cgo usage during the build. Set it to 1
:: to include all cgo related files, .c and .go file with "cgo"
:: build directive, in the build. Set it to 0 to ignore them.

@echo off

:: Keep environment variables within this script
:: unless invoked with --no-local.
if x%1==x--no-local goto nolocal
if x%2==x--no-local goto nolocal
setlocal
:nolocal

set GOBUILDFAIL=0

if exist make.bat goto ok
echo Must run make.bat from Go src directory.
goto fail 
:ok

:: Clean old generated file that will cause problems in the build.
del /F ".\pkg\runtime\runtime_defs.go" 2>NUL

:: Grab default GOROOT_FINAL and set GOROOT for build.
:: The expression %VAR:\=\\% means to take %VAR%
:: and apply the substitution \ = \\, escaping the
:: backslashes.  Then we wrap that in quotes to create
:: a C string.
cd ..
set GOROOT=%CD%
cd src
if "x%GOROOT_FINAL%"=="x" set GOROOT_FINAL=%GOROOT%
set DEFGOROOT=-DGOROOT_FINAL="\"%GOROOT_FINAL:\=\\%\""

echo # Building C bootstrap tool.
echo cmd/dist/*.c
if not exist ..\bin\tool mkdir ..\bin\tool
:: Windows has no glob expansion, so spell out cmd/dist/*.c.
gcc -O2 -Wall -Werror -o cmd/dist/dist.exe -Icmd/dist %DEFGOROOT% cmd/dist/buf.c cmd/dist/build.c cmd/dist/buildgc.c cmd/dist/buildgo.c cmd/dist/buildruntime.c cmd/dist/main.c cmd/dist/windows.c cmd/dist/arm.c
if errorlevel 1 goto fail
.\cmd\dist\dist env -wp >env.bat
if errorlevel 1 goto fail
call env.bat
del env.bat
echo.

Окончательный результат - просто стандартная ошибка gcc:

Инструмент начальной загрузки Building C.

cmd / dist / *. C

"gcc" не распознается как ...

1 Ответ

1 голос
/ 19 сентября 2019

Go 1.4 написан на C, и поэтому требует компиляции C.CGO совершенно не связан с этим.

Go 1.5 была первой версией, не требующей сборки C.

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