Страница 3 из 6
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:44
Olej
perseus писал(а):я пользуюсь Linux Mint 17
Ну ... слава Богу!
Это уже куда безопаснее чем Ubuntu.
У меня на разных машинах есть установленные Mint 17.3 и 18.1 ... я посмотрю и сравню (чуть позже ... их включать надо
).
P.S. Мне очень странно откуда вы взяли в Mint 17 версии Go порядка 1.7.1 ... там всё должно быть гораздо более старое?
perseus писал(а):
Так что всётаки скажите, Олег Иванович, о сборке программ со сторонними пакетами в Go ?
мне кажется есть что в ваш конспект добавить
Добавить то - дел не хитрое...
Только нужно
прежде разобраться, наблюдаем мы здесь реальную проблему ... или это только кажется?
, или ошибки сборки? ... отмоделировать, проверить ...
И смотреть это можно
только на реальных прототипах, примерах кода, которые вы за 2-3 дня обсуждения ничего так и не показали.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:51
Olej
perseus писал(а):я удалил пакет gcc-go и версия go такая:
Ничего не нужно
скоропалительно удалять или устанавливать! (это порождает только истерику, а не понимание).
Реализации Go от Golang & GCC - замечательно сосуществуют и используются
параллельно, совместно.
А переключаться между тем, какой из них использовать, можно легко (секундно
) средствами такого инструмента Linux как alternatives. Подробно это можно посмотреть здесь:
Инструменты Go (+/-2-3 сообщения от ссылки) и
alternatives.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:56
Olej
perseus писал(а):Так в каких случайх go собирает статические приложения, а в каких динамические ? И от чего это зависит ?
Ясности пока нет на практике.
Это
радикальным образом зависит от того, каким компилятором (и сопутствующим ему инструментарием) вы пользуетесь.
А во-вторых, и тот и другой проект (Golang & GCC Go) позволяют (в более-менее последних версиях) производить и статическую и динамическую сборку.
И, в-третьих, существуют ещё и другие (и активно используемые) проекты реализации Go сверх даже этих 2-х ... : в рамках того же проекта LLVM (где Clang) ... но и он не последний.
Re: cборка приложений Go
Добавлено: 12 май 2017, 14:58
perseus
Согласен, разобраться необходимо, я поэтому к вам и обратился с этим вопросом, как к серьёзносу и уважаемому эксперту.
Касательно версии go 1.7.7 - я установил её в Минт17 скачав с сайта
http://www.golang.org
Я вам очень благодарен за подсказки по теме.
Касательно прототипов кода - мне кажется дело не в коде программ, а в том какие пакеты импортируешь в программу.
Но если вы всётаки будете настаивать на примере кода, я его конечно выложу, секретов тут нет.
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:25
perseus
Кстати в Минте17 нет доступа к проге alternatives, вместо неё предлагается galternatives с графическим интерфейсом,
которая ничего не даёт поменять
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:26
Olej
perseus писал(а):Касательно прототипов кода - мне кажется дело не в коде программ, а в том какие пакеты импортируешь в программу.
Дело не в самом коде, а в том,
как и чем он собирается, в Makefile ... но без
прототипа кода приложения собирать нечего и рассуждать не о чем.
perseus писал(а):Но если вы всётаки будете настаивать на примере кода, я его конечно выложу, секретов тут нет.
Мне ваши секреты не нужны
... как, собственно, и ваш код если он большой - разбираться в большом коде никто не станет.
В таких случаях (когда нужно разобраться):
- пишется
небольшое приложение, a'la Hello World ... (возможно как минимальная "вырезка" из не складывающего приложения);
- на нём делается сборка и разбирательство с проблемой;
Эта, кажущаяся, "лишняя" работа экономит
очень много времени при работе над реальными крупными разработками.
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:30
Olej
perseus писал(а):Касательно версии go 1.7.7 - я установил её в Минт17 скачав с сайта
http://www.golang.org
Так это у вас явно проект Golang и он никакого касательства к GCC не имеет.
Код: Выделить всё
olej@nvidia ~/2017_WORK $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 18.1 Serena
Release: 18.1
Codename: serena
[code]
olej@nvidia ~/2017_WORK $ apt list gccgo* | wc -l
78
[/code]
78 пакетов относящихся к проекту GCC Go.
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:48
perseus
ну вот простой пример - UDPserver для отладки:
Код: Выделить всё
// UDP-эхо-сервер для отладки UDP соединения
package main
import(
"io"
"fmt"
"log"
"net"
"my_package/structures"
"imitator/params"
"unsafe"
"time"
)
func main() {
// Переменные программы
var PVTcount uint8 //счётчик повторной выдачи сообщений
var PCHcount uint8 //счётчик предельного числа последовательных сбоев
// Адрес
myAddr, err := net.ResolveUDPAddr("udp", "localhost:8000")
if err != nil {
log.Fatal("ResolveUDPAddr:",err)
}
conn, err := net.ListenUDP("udp", myAddr)
if err != nil {
log.Fatal("ListenUDP:",err)
}
defer conn.Close()
// Структура с информацией
var ztech structures.Z_Tech
buf := make([]byte, unsafe.Sizeof(ztech))
// Таймер
tick := time.Tick(500*time.Millisecond) // Таймер
// читаем из соединения
for {
n, cliAddr, err := conn.ReadFrom(buf)
if err == io.EOF {
log.Println(err)
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("От абонента %s полученно %d байт данные: %v\n", cliAddr.String(),n,buf)
// Реконструируем структуру из буфера
ztech, err := structures.ReconstrZ_Tech(buf) //метод восстановления структуры
if err !=nil {
log.Println("Восстановление не получилось")
}
fmt.Println("Реконструированная структура:", ztech)
switch ztech.Ks { //изменяем поля принятой структуры
case params.Z_INI:
ztech.Ks = params.Z_OTV
ztech.Bstrm = params.ISPR
ztech.Prior = params.NO_ZAPRET
ztech.Idf = 101
PVTcount = 0
PCHcount = 0
case params.Z_OTV:
default:
ztech.Ks = params.Z_INI
ztech.Bstrm = params.ISPR
ztech.Prior = params.NO_ZAPRET
ztech.Idf = 101
PVTcount++
PCHcount++
}
//Задержка отправления
<- tick
// записываем структуру в буфер
n, err = ztech.Read(buf)
if err == io.EOF {
fmt.Println("buf:", buf)
} else {
if err != nil {
log.Fatal("Read:",err)
}
}
n, err = conn.WriteTo(buf, cliAddr)
fmt.Println("send to ",cliAddr.String()," ",n,"bytes")
}
}
func echo(c net.Conn, b []byte) {
fmt.Fprint(c, b)
}
а вот его сборка и анализ исполняемого файла:
Код: Выделить всё
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ go version
go version go1.7.1 linux/386
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ go build udpserver.go
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ ls -l
total 2336
-rwxr-xr-x 1 maksim maksim 2387123 мая 12 15:45 udpserver
-rw-r--r-- 1 maksim maksim 2375 мая 12 15:43 udpserver.go
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ ldd udpserver
linux-gate.so.1 => (0xb7734000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb76fa000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb754b000)
/lib/ld-linux.so.2 (0xb7735000)
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ file udpserver
udpserver: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
получается динамически собранный файл, а как создать статически собранный ?
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:54
perseus
Код: Выделить всё
maksim@maksim-MS-7519 ~/Progy/Go/src/udpserver $ apt list gccgo* | wc -l
37
у меня 37 пакетов
Re: cборка приложений Go
Добавлено: 12 май 2017, 15:58
Olej
perseus писал(а):ну вот простой пример - UDPserver для отладки:
Файлы (примеров, кодов) можно (и нужно!
) не копировать цитированием (хотя и это не лишнее для наглядности, иногда), а
прикреплять к своему сообщению - там у вас внизу, ниже окна редактирования, есть "Имя файла", "Обзор", "Добавить файл" и т.д.
Можно хоть в архив запаковывать .tgz файлы нужные для проекта хоть поштучно прикреплять (*.go, Makefile, ...) - файлов прикреплённых может быть много.