cборка приложений Go

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 13:56

perseus писал(а):Вот результаты эксперемента с другой версией go: :shock:
Обрамляйте вывод команд и примеры кода тэгом <code> (значок там есть у вас над окном редактирования ответа).
Иначе оно очень плохо читается.

P.S. Я ваши предыдущие ответы поправлю ... прежде, чем с ними разбираться ;-) , но вы дальше это делайте сами.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 14:03

perseus писал(а): компилятор gccgo-go, НО в нем не определён флаг -buildmode как я уже писал выше :lol:
Замкнутый круг получается :oops:
Для тех же целей у компилятора GCC Go предназначены совершенно другие опции. Они по-другому записываются - так как это более традиционно принято в GCC, там один и тот же компилятор для многих разных языков программирования.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 14:07

perseus писал(а):

Код: Выделить всё

maksim-MS-7519 maksim # go version
go version xgcc (Ubuntu 4.9.3-0ubuntu4) 4.9.3 linux/386
Мне вот это (такую запись) странно видеть... :-o
Но, похоже, в Ubuntu всё и как всегда - через задницу... :oops:

Аватара пользователя
perseus
Писатель
Сообщения: 99
Зарегистрирован: 11 май 2017, 18:01
Откуда: Щёлково, Московская обл.
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение perseus » 12 май 2017, 14:21

А ещё я обратил внимание, что go версии 1.7.1 вообще не собирает статических программ со сторнними пакетами.
Вот сведения о компиляции некоторых моих программок:

Код: Выделить всё

maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $ ls
tcpserver  tcpserver.go
maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $ ldd tcpserver
	linux-gate.so.1 =>  (0xb7714000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb76da000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb752b000)
	/lib/ld-linux.so.2 (0xb7715000)
maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $ go version
go version go1.7.1 linux/386
maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $ 
maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ cd ..
maksim@maksim-MS-7519 ~/Progy/Go/src $ cd hellodb
maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ ls
hellodb  hellodb.go  outputDB  outputUsr
maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ ldd hellodb
	linux-gate.so.1 =>  (0xb7745000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb770b000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755c000)
	/lib/ld-linux.so.2 (0xb7746000)
везде присутствуют четыре линуксовые библиотеки.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 14:22

Olej писал(а):Но, похоже, в Ubuntu всё и как всегда - через задницу... :oops:
Смотрите сюда ;-) :

Код: Выделить всё

[olej@dell ~]$ dnf info golang
Последняя проверка окончания срока действия метаданных: 3 days, 16:36:33 назад, Mon May  8 21:39:14 2017.
Установленные пакеты
Имя         : golang
Архитектура : x86_64
Эпоха       : 0
Версия      : 1.5.4
Релиз       : 5.fc23
Размер      : 11 M
Репозиторий : @System
Из репозито : updates
Краткое опи : The Go Programming Language
URL         : http://golang.org/
Лицензия    : BSD and Public Domain
Описание    : The Go Programming Language.

Код: Выделить всё

[olej@dell ~]$ dnf info gcc-go
Последняя проверка окончания срока действия метаданных: 3 days, 16:36:49 назад, Mon May  8 21:39:14 2017.
Установленные пакеты
Имя         : gcc-go
Архитектура : x86_64
Эпоха       : 0
Версия      : 5.3.1
Релиз       : 6.fc23
Размер      : 24 M
Репозиторий : @System
Из репозито : updates
Краткое опи : Go support
URL         : http://gcc.gnu.org
Лицензия    : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Описание    : The gcc-go package provides support for compiling Go programs
            : with the GNU Compiler Collection.
Это 2 совершенно разных проекта, разрабатываемых разными людьми, и даже отличающиеся лицензиями использования ... хотя и разрабатываются эти 2 проекта при очень плотном взаимодействии их участников.

Код: Выделить всё

[olej@dell ~]$ go version
go version go1.5.4 linux/amd64

Код: Выделить всё

[olej@dell ~]$ gccgo --version
gccgo (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.
P.S. Это так выглядит в Fedora, где всё куда более упорядочено ;-) :

Код: Выделить всё

[olej@dell ~]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 23 (Twenty Three)
Release:	23
Codename:	TwentyThree

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 14:26

perseus писал(а):А ещё я обратил внимание, что go версии 1.7.1 вообще не собирает статических программ со сторнними пакетами.
Я думаю (IMHO), что вы просто неправильно истолковали то, что наблюдаете.
Но это всё можно легко проверить ... но на примерах и прототипах кода.

Но прежде, чем продолжать, разберитесь с каким компилятором вы работаете.

Аватара пользователя
perseus
Писатель
Сообщения: 99
Зарегистрирован: 11 май 2017, 18:01
Откуда: Щёлково, Московская обл.
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение perseus » 12 май 2017, 14:31

я пользуюсь Linux Mint 17

Код: Выделить всё

maksim@maksim-MS-7519 ~ $ lsb_release -a
No LSB modules are available.
Distributor ID:	LinuxMint
Description:	Linux Mint 17 Qiana
Release:	17
Codename:	qiana
Так что всётаки скажите, Олег Иванович, о сборке программ со сторонними пакетами в Go ?
мне кажется есть что в ваш конспект добавить ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение Olej » 12 май 2017, 14:35

perseus писал(а):

Код: Выделить всё

maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ ldd hellodb
	linux-gate.so.1 =>  (0xb7745000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb770b000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755c000)
	/lib/ld-linux.so.2 (0xb7746000)
везде присутствуют четыре линуксовые библиотеки.
Ну и что?

libc.so.6 - это библиотека интерфейса всех системных вызовов Linux, ни одна программа в Linux на любом языке программирования (например C++ или Python) не стает работать при отсутствии этой библиотеки.
В принципе, можно в Golang статически собрать приложение, которое не будет использовать libc.so.6 (и Golang так и делает по умолчанию, но GCC Go не делает так) ... но это достаточно рискованное мероприятие, поскольку:
- при переносе на другую версию (ядра, системных вызовов) Linux такое приложение может пойти вразнос;
- не бывает инсталляций ОС Linux, даже самых замысловатых, спецприменений и т.д., в которых не было бы интерфейсной библиотеки libc.so - без неё потеряется работоспособность 95% приложений и утилит Linux.

/lib/ld-linux.so.2 - это служебная библиотека динамической загрузки разделяемых DLL библиотек.

Аватара пользователя
perseus
Писатель
Сообщения: 99
Зарегистрирован: 11 май 2017, 18:01
Откуда: Щёлково, Московская обл.
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение perseus » 12 май 2017, 14:38

я удалил пакет gcc-go и версия go такая:

Код: Выделить всё

maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $ go version
go version go1.7.1 linux/386
maksim@maksim-MS-7519 ~/Progy/Go/src/tcpserver $
maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ cd ..
maksim@maksim-MS-7519 ~/Progy/Go/src $ cd hellodb
а при анализе файлов собранных им выдаются ссылки на библиотеки Линукс:

Код: Выделить всё

maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ ls
hellodb  hellodb.go  outputDB  outputUsr
maksim@maksim-MS-7519 ~/Progy/Go/src/hellodb $ ldd hellodb
   linux-gate.so.1 =>  (0xb7745000)
   libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb770b000)
   libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755c000)
   /lib/ld-linux.so.2 (0xb7746000)

Аватара пользователя
perseus
Писатель
Сообщения: 99
Зарегистрирован: 11 май 2017, 18:01
Откуда: Щёлково, Московская обл.
Контактная информация:

Re: cборка приложений Go

Непрочитанное сообщение perseus » 12 май 2017, 14:42

Так в каких случайх go собирает статические приложения, а в каких динамические ? И от чего это зависит ?
Ясности пока нет на практике.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей