LINUX.ORG.RU

Проблема при сборке с помощью gccgo

 ,


0

1

Не собираются многие проекты из-за одной и той же ошибки:

go get -v -compiler gccgo -u github.com/coreos/etcd

# golang.org/x/net/http2
gohome/src/golang.org/x/net/http2/go17.go:10:9: error: import file ‘context’ not found
  "context"
         ^
gohome/src/golang.org/x/net/http2/go17.go:13:20: error: import file ‘net/http/httptrace’ not found
  "net/http/httptrace"
                    ^
gohome/src/golang.org/x/net/http2/go17.go:18:9: error: expected package
  context.Context
         ^
gohome/src/golang.org/x/net/http2/go17.go:18:2: error: expected signature or type name
  context.Context

Версии:

$ go version
go version go1.7.4 linux/amd64

$ gccgo -v
Using built-in specs.
COLLECT_GCC=gccgo
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-5' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 6.3.0 20170124 (Debian 6.3.0-5) 

Кому нибудь удавалось собрать etcd или consul с gccgo?

Проблема похожа на этот баг https://github.com/golang/go/issues/15628 но костыль оттуда мне не помог.

★★

Вместо пути в том костыле тебе нужен правильный GOROOT, так как context идет в стандартной поставке.

feofan ★★★★★
()
Ответ на: комментарий от feofan

Под дебиан понятно не нужно, хотел узнать можно ли собрать consul или etcd под другие используемые платформы, в том числе собранный из-под билдрута линукс..

Leron ★★
() автор топика
Ответ на: комментарий от Leron

Есть же кросскомпиляция - https://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

The valid combinations of $GOOS and $GOARCH are:

$GOOS	$GOARCH
android	arm
darwin	386
darwin	amd64
darwin	arm
darwin	arm64
dragonfly	amd64
freebsd	386
freebsd	amd64
freebsd	arm
linux	386
linux	amd64
linux	arm
linux	arm64
linux	ppc64
linux	ppc64le
linux	mips64
linux	mips64le
netbsd	386
netbsd	amd64
netbsd	arm
openbsd	386
openbsd	amd64
openbsd	arm
plan9	386
plan9	amd64
solaris	amd64
windows	386
windows	amd64

feofan ★★★★★
()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от BigAlex

И вроде как gccgo протух.

В смысле?! Я как раз считал, что gccgo --- одна из причин учить go.

DarkAmateur ★★★
()
Ответ на: комментарий от BigAlex

https://beta.golang.org/doc/go1.8#gccgo

Due to the alignment of Go's semiannual release schedule with GCC's annual release schedule, GCC release 6 contains the Go 1.6.1 version of gccgo.

Т.е. не протух (особенно, если предположить, что мэйнтейнеры бекпортировали немногочисленные баг-фиксы из пары патч-релизов). А повезёт, так вообще снова произойдёт синхронизация:

We expect that the next release, GCC 7, will contain the Go 1.8 version of gccgo.

gag ★★★★★
()

gcc version 6.3.0 20170124 (Debian 6.3.0-5)

Можно установить gcc-snapshot из Debian Sid. Это всего лишь один пакет со всем gcc, который иногда требует binutils из Sid, которые всё равно через пару дней прилетят в Stretch. Затем установить переменные окружения:

$ export LD_LIBRARY_PATH=/usr/lib/gcc-snapshot/lib:$LD_LIBRARY_PATH
$ export PATH=/usr/lib/gcc-snapshot/bin:$PATH
И снова попробовать компиляцию.

Установка gccgo-7 из экспериментальной ветки потребует замены всех gcc пакетов, что уже порадикальней будет, и лучше не делать.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от gag

Да без разницы, у gccgo все горутины — это просте треды ос, что вообще убивает весь смысл языка.

Порт го на llvm тоже сгнил уже, не судьба видимо го поиметь нормальный оптимизирующий компилятор.

anonymous
()
Ответ на: комментарий от gag

Почти:

$ go get -v -compiler gccgo github.com/coreos/etcd 
github.com/coreos/etcd/pkg/cpuutil
# github.com/coreos/etcd/pkg/cpuutil
gohome/src/github.com/coreos/etcd/pkg/cpuutil/endian.go:31:13: error: array bound is not constant
  if v := (*[intWidth]byte)(unsafe.Pointer(&i)); v[0] == 0 {
             ^
gohome/src/github.com/coreos/etcd/pkg/cpuutil/endian.go:31:51: error: array index out of bounds
  if v := (*[intWidth]byte)(unsafe.Pointer(&i)); v[0] == 0
Leron ★★
() автор топика
Ответ на: комментарий от gag

context только в 1.7 появился в stdlib.

anonymous
()
Ответ на: комментарий от Leron

Почти!

После редактирования endian.go дошло до линковки. Падает с кучей ошибок вида

gohome/pkg/gccgo_linux_amd64/github.com/spf13/libcobra.a(_go_.o):(.data.rel.ro.__go_td_FpN6_stringN3_interN6_stringee[__go_td_FpN6_stringN3_interN6_stringee]+0x20): undefined reference to `__go_type_equal_error_descriptor'

Leron ★★
() автор топика
Ответ на: комментарий от Leron

Большое спасибо всем отписавшимся, особенно gag. etcd собрался после очистки GOPATH/pkg, думаю можно также собрать и consul

Leron ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.