Страница 2 из 6
Re: cборка приложений Go
Добавлено: 12 май 2017, 13:56
Olej
perseus писал(а):Вот результаты эксперемента с другой версией go:
Обрамляйте вывод команд и примеры кода тэгом
<code> (значок там есть у вас над окном редактирования ответа).
Иначе оно очень плохо читается.
P.S. Я ваши предыдущие ответы поправлю ... прежде, чем с ними разбираться
, но вы дальше это делайте сами.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:03
Olej
perseus писал(а):
компилятор gccgo-go, НО в нем не определён флаг -buildmode как я уже писал выше
Замкнутый круг получается
Для
тех же целей у компилятора GCC Go предназначены
совершенно другие опции. Они по-другому записываются - так как это более традиционно принято в GCC, там один и тот же компилятор для многих разных языков программирования.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:07
Olej
perseus писал(а):
Код: Выделить всё
maksim-MS-7519 maksim # go version
go version xgcc (Ubuntu 4.9.3-0ubuntu4) 4.9.3 linux/386
Мне вот это (такую запись) странно видеть...
Но, похоже, в Ubuntu всё и как всегда - через задницу...
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:21
perseus
А ещё я обратил внимание, что 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)
везде присутствуют четыре линуксовые библиотеки.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:22
Olej
Olej писал(а):Но, похоже, в Ubuntu всё и как всегда - через задницу...
Смотрите сюда
:
Код: Выделить всё
[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
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:26
Olej
perseus писал(а):А ещё я обратил внимание, что go версии 1.7.1 вообще не собирает статических программ со сторнними пакетами.
Я думаю (IMHO), что вы просто неправильно истолковали то, что наблюдаете.
Но это всё можно легко проверить ... но
на примерах и прототипах кода.
Но
прежде, чем продолжать, разберитесь
с каким компилятором вы работаете.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:31
perseus
я пользуюсь 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 ?
мне кажется есть что в ваш конспект добавить
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:35
Olej
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 библиотек.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:38
perseus
я удалил пакет 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)
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:42
perseus
Так в каких случайх go собирает статические приложения, а в каких динамические ? И от чего это зависит ?
Ясности пока нет на практике.