Я собираю gccgo с помощью crosstool-ng 1.24.0. Получил ошибку компоновщика при компиляции очень простого main.go. Есть идеи, как это решить? Любой указатель на успешную сборку gogcc даже для другой популярной цели, которую легко проверить?
Хост - Ubuntu 18.04 с gcc 7.3.0. Целью crosstool-ng является x86_64-ubuntu16.04-linux-gnu, которая должна создать gcc 8.3.0 с glibc 2.23.
Вот недостающие символы:
undefined reference to `__morestack_block_signals'
undefined reference to `__generic_morestack'
undefined reference to `__morestack_unblock_signals'
undefined reference to `__morestack_block_signals'
undefined reference to `__generic_releasestack'
undefined reference to `__generic_findstack'
undefined reference to `__generic_morestack_set_initial_sp'
undefined reference to `__morestack_load_mmap'
Подробнее о шагах сборки:
[1] Проверьте crosstool-ng. Хозяин сейчас на 1.24.0.
[2] Запустите эти команды для создания простого набора инструментов c и c ++:
./bootstrap
./configure --enable-local
make
./ct-ng show-x86_64-ubuntu16.04-linux-gnu
./ct-ng x86_64-ubuntu16.04-linux-gnu
./ct-ng build
[3] Убедитесь, что gcc работает, скомпилировав программу hello-world и запустите.
[4] Отредактируйте скрипт, чтобы включить go. Патч выглядит так:
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
@@ -597,7 +597,7 @@ do_gcc_core_backend() {
- --enable-languages="${lang_list}" \
+ --enable-languages="${lang_list},go" \
@@ -903,7 +903,7 @@ do_gcc_backend() {
- extra_config+=("--enable-languages=${lang_list}")
+ extra_config+=("--enable-languages=${lang_list},go")
[5] Запустите ./ct-ng build
снова.
[6] Скомпилируйте очень простой файл main.go:
// main.go
package main
import "fmt"
func main() {
fmt.Printf("Ok, ok, this is exactly perfect!\n")
}
Использование команды:
PATH=${HOME}/x-tools/x86_64-ubuntu16.04-linux-gnu/bin/:${PATH}
export PATH
x86_64-ubuntu16.04-linux-gnu-gccgo -o main main.go
Получил эти ошибки:
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/x-tools/x86_64-ubuntu16.04-linux-gnu/lib/gcc/x86_64-ubuntu16.04-linux-gnu/8.3.0/libgcc.a(morestack.o):
in function `__morestack':
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:504:
undefined reference to `__morestack_block_signals'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:512:
undefined reference to `__generic_morestack'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:531:
undefined reference to `__morestack_unblock_signals'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:556:
undefined reference to `__morestack_block_signals'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:562:
undefined reference to `__generic_releasestack'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:588:
undefined reference to `__morestack_unblock_signals'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:609:
undefined reference to `__generic_findstack'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/x-tools/x86_64-ubuntu16.04-linux-gnu/lib/gcc/x86_64-ubuntu16.04-linux-gnu/8.3.0/libgcc.a(morestack.o):
in function `__stack_split_initialize':
~/crosstool-ng/.build/x86_64-ubuntu16.04-linux-gnu/src/gcc/libgcc/config/i386/morestack.S:758:
undefined reference to `__generic_morestack_set_initial_sp'
~/x-tools/x86_64-ubuntu16.04-linux-gnu/lib/gcc/x86_64-ubuntu16.04-linux-gnu/8.3.0/../../../../x86_64-ubuntu16.04-linux-gnu/bin/ld:
~/x-tools/x86_64-ubuntu16.04-linux-gnu/lib/gcc/x86_64-ubuntu16.04-linux-gnu/8.3.0/libgcc.a(morestack.o):
(.ctors.65535+0x8):
undefined reference to `__morestack_load_mmap'
collect2: error: ld returned 1 exit status