Можно ли создать общую библиотеку (.so) с помощью Go?Общая библиотека в Go?
ОБНОВЛЕНО: создано «issue» для этого.
Можно ли создать общую библиотеку (.so) с помощью Go?Общая библиотека в Go?
ОБНОВЛЕНО: создано «issue» для этого.
Это теперь возможно с помощью -linkshared флаг
Что вам нужно сделать, это сначала выполнить следующую команду: (! Над кодом делает все общие пакеты разделяемыми)
go install -buildmode=shared -linkshared std
затем
go install -buildmode=shared -linkshared userownpackage
окончательно при составлении кода, который необходимо запустить:
go build -linkshared yourprogram
Что выше, это сейчас, а не статически связывать все, только динамически связывает их, и в итоге вы получите гораздо более мелкие скомпилированные файлы. Чтобы дать вам представление, мой файл «hello.go» со статической связью составляет 2,3 МБ, а тот же код с использованием динамической компоновки - всего 12 КБ!
Видимо, теперь это возможно, но только под очень точный набор обстоятельств. Точнее, если вы пишете для платформы Android.
Проект «goandroid» на GitHub предоставляет набор исправлений, который позволяет перейти к созданию общей библиотеки для конкретного использования с Android NDK. См https://github.com/eliasnaur/goandroid
Как сейчас (июль 2013 г.), это расширение для Go Tools и не встроено в инструменты Go, которые отправляет Google. – Nate
@Nate вы можете ссылаться на расширение? Является ли (автономное) расширение пригодным для использования только на андроиде или оно доступно для использования на рабочем столе? –
@mihaistancu Я предполагаю, что было бы непросто перекрестно скомпилировать go для android, см. [Здесь] (https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android). В ближайшее время можно получить официальную поддержку, учитывая, что golang 1.5 поддерживает iOS. – Nate
Go Execution Modes описывает Building Go пакеты в качестве общей библиотеки:
«В этом режиме пакет Go, или набор пакетов, может быть построен как разделяемая библиотека Программа Go, которая импортирует один или. более те пакеты Go могут быть связаны с этой общей библиотекой. Общая библиотека может быть изменена между моментом, когда была запущена программа Go, и временем ее запуска; общая библиотека, доступная при запуске программы, - это та, которая будет используется ...
В выпуске Go 1.5 это реализовано только для цели linux-amd64. используя gccgo, он реализуется для любой поддерживаемой цели ».
Я тоже вернулся к этому вопросу, чтобы написать обновление. +1 –
Возможно сейчас! Я создал файл .so с помощью Go, а затем импортировал в python довольно легко! Вот статьи, которые мне понравились: http://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/
Правильный ответ. – 0x90
вот что я искал. Но дает '-buildmode = shared не поддерживается на darwin/amd64' на моем mac. – lvle