Общая библиотека в Go? - PullRequest
       23

Общая библиотека в Go?

24 голосов
/ 18 ноября 2009

Можно ли создать общую библиотеку (.so) с помощью Go?

ОБНОВЛЕНО : создан для него вопрос .

Ответы [ 4 ]

25 голосов
/ 28 января 2016

Теперь это возможно, используя -linkshared flag

Что вам нужно сделать, это сначала выполнить эту команду:

go install -buildmode=shared -linkshared  std

(Приведенный выше код делает все общие пакеты общедоступными!) тогда

go install  -buildmode=shared -linkshared userownpackage

наконец, при компиляции кода вам нужно выполнить:

go build -linkshared yourprogram

Что выше перечислено, так это теперь, вместо того, чтобы статически связывать все, только динамически связывать их, и вы получите гораздо меньшие скомпилированные файлы. Просто чтобы дать вам представление, мой файл "hello.go" со статической связью занимает 2,3 МБ, тогда как тот же код, использующий динамическую связь, занимает всего 12 КБ!

7 голосов
/ 25 августа 2015

Режимы выполнения Go описывает Создание пакетов Go в качестве общей библиотеки :

"В этом режиме пакет Go или набор пакетов могут быть собраны в качестве общей библиотеки. Программа Go, которая импортирует один или несколько из этих пакетов Go, может быть связана с этой общей библиотекой. Общая библиотека может быть изменена между временем связывания программы Go и временем ее запуска будет использоваться общая библиотека, доступная при запуске программы ...

В версии Go 1.5 это реализовано только для цели linux-amd64. При использовании gccgo это реализовано для любой поддерживаемой цели. "

6 голосов
/ 24 июля 2016

Возможно сейчас! Я создал файл .so с помощью Go, а затем довольно легко импортировал его в python! Вот статьи, которые мне понравились: http://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/

4 голосов
/ 29 июня 2013

По-видимому, теперь это возможно, но только при очень точном стечении обстоятельств. Точнее, если вы пишете для платформы Android.

Проект "goandroid" на GitHub предоставляет набор исправлений, которые позволяют Go создавать общую библиотеку для конкретного использования с Android NDK. Смотри https://github.com/eliasnaur/goandroid

...