Olej писал(а): ↑20 янв 2022, 01:57
Вот так!
Но сама подсказка подсказывает, что не хватает модуля CGO - модуля связи языков C и Go, о котором много пишут, и которым я займусь отдельно ... вот пока самое интересное:
C? Go? Cgo!
Exploring shared objects in Go
Feb 12, 2017 post
cgo.Documentation
Пока мне достаточно указать 1 допонительный import ("C"):
Код: Выделить всё
package main
/* первая программа
демонстрирующая
синтаксис языка Go */
import "C"
import ( "fmt"
"os" )
func main(){
fmt.Println( "ты кто будешь?" )
fmt.Printf( "> " )
буфер := make( [] byte, 120 )
длина, _ := os.Stdin.Read( буфер ) // возвращается 2 значения
Ω := длина
ответ := string( буфер[ : Ω - 1 ] ) // убрали '\n'
fmt.Printf( "какое длинное имя ... целых %d байт\n", Ω )
fmt.Printf( "привет, %s\n", ответ )
}
И ...
Код: Выделить всё
olej@R420:~/2022/Go$ go build -o hello.4 -linkshared -compiler gc hello.go
Код: Выделить всё
olej@R420:~/2022/Go$ ls -l hello.4
-rwxrwxr-x 1 olej olej 3524368 янв 20 01:01 hello.4
olej@R420:~/2022/Go$ ldd hello.4
linux-vdso.so.1 (0x00007ffd22552000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4455aa5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f44558b3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4455df6000)
olej@R420:~/2022/Go$ file hello.4
hello.4: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=610b7cf30acd5bca5b849d4e005b6f9f5a238cba, for GNU/Linux 3.2.0, not stripped
Всё собрано динамически!
Список подключаемых библиотек совсем не тот, что при сборке GCC.
Всё так же работоспособно:
Код: Выделить всё
olej@R420:~/2022/Go$ ./hello.4
ты кто будешь?
> вася
какое длинное имя ... целых 9 байт
привет, вася
Но если мы сравним размеры
:
Код: Выделить всё
olej@R420:~/2022/Go$ ls -l hello.*
-rwxrwxr-x 1 olej olej 52464 янв 20 00:12 hello.1
-rwxrwxr-x 1 olej olej 2038125 янв 20 00:20 hello.2
-rwxrwxr-x 1 olej olej 62544 янв 20 00:20 hello.3
-rwxrwxr-x 1 olej olej 3524368 янв 20 01:01 hello.4
-rw-r--r-- 1 olej olej 612 янв 20 01:01 hello.go
- то на это раз наша динамическая сборка много более громоздкая, чем статическая...
Но это, предполагаю, только на очень маленьком фрагменте кода.