Как кросс-компилировать солярис 32-битный - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время мы создаем наши исполняемые файлы Go для нескольких платформ, включая Solaris 64-bit.У нас также есть запросы на 32-разрядную исполняемую версию Solaris, и я не могу заставить ее работать (человек, который установил 64-разрядный кросс-компилятор Solaris, ушел и недоступен).

Я пытался просто настроитьФлаг -m32 на идет сборка с использованием существующей кросс-компиляции Solaris, но это не сработало, поэтому я пытаюсь создать 32-разрядный кросс-компилятор Solaris.

Я гуглил и нашел несколько расплывчатых примеров, поэтому я слежу за этим процессом:

  1. Копирование заголовков и библиотек с 32-разрядной машины Solaris на мою машину для сборки Linux.
  2. D / L и сборка binutils и gcc, указывающих SYSROOT на загруженные 32-разрядные заголовки и библиотеки Solaris, где:

$ TARGET = sparc-sun-solaris2.10

$ SYSROOT = / path / to / solaris32 / включает в себя

$ PREFIX = / path / to / gcc-output

binutils-2.31/configure -target=$TARGET --prefix=$PREFIX -with-sysroot=$SYSROOT -v

gcc-8.2.0/configure --target=$TARGET --with-gnu-as --with-gnu-ld  --prefix=$PREFIX -with-sysroot=$SYSROOT --disable-libgcj --enable-languages=c,c++,go -v
Создайте символическую ссылку на gogcc и поместите GCC в путь

Скомпилируйте тривиальную программу go-теста следующим образом:

go build --compiler gccgo --gccgoflags "-m32 -O3 -static-libgo -Wl,-dy -lnsl -lsocket -lrt -lsendfile" -o ${GOTOOLS}/${BINARIES}/${PROJECT_NAME}/test/solaris_sparc32 test/main.go

Это происходит следующим образом:

go build: при использовании gccgo toolchain передавайте флаги компилятора, используя -gccgoflags, а не -gcflags

аргументы командной строки

gccgo: error: нельзя использовать -m32 и -m64

Очевидно, я не знаю, что делаю.Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 03 октября 2018

32-разрядная версия Solaris, по-видимому, не поддерживается, согласно списку поддерживаемых целей OS / arch :

Допустимые комбинации $ GOOS и $ GOARCH::

$GOOS     $GOARCH
...
solaris   amd64
...

То есть 64-разрядная версия Solaris явно указана в качестве поддерживаемой платформы, а 32-разрядная версия Solaris указана , а не .

Как таковаяЕсть веские основания полагать, что программы go не будут надежно работать на 32-разрядных системах Solaris, и вам, вероятно, не следует соглашаться на поддержку этой платформы (если вам действительно удалась эта кросс-компиляция) в основном потому, чтосама команда go не поддерживает это!

...