Мы использовали пойти помочь buildmode может увидеть идти можно построить различные способы, используя статическую библиотеку ссылок по умолчанию.
➜ ЦСИ пойти помочь buildmode « идти строить » и « идут установить » команды принимают -buildmode аргумент , который указывает , который вид объекта файла должен быть построен. В настоящее время поддерживаются значения являются: -buildmode = архив Постройте перечисленные Некоммерческий - основные пакеты в .a файлы. Пакеты с именем основной игнорируются. -buildmode = c- архив сборки перечисленного основной пакета, а также все пакеты, которые импортируют, в архиве C файловых . Только Вызываемые символы будут те функции экспортируются с использованием ОЦП // экспорт комментарий. Требуется ровно один основной пакет будет в списке. -buildmode = c- совместно построить перечисленную основной пакет, а также все пакеты, которые импортирует, в C разделяемую библиотеку. Только Вызываемые символы будут иметь те функции , экспортируемые с помощью ОЦП // экспорта комментария. Требуется ровно один основной пакет будет в списке. -buildmode = по умолчанию Перечислены основные пакеты встроены в исполняемые файлы и перечислены не - основные пакеты встроены в .a файлы (по умолчанию поведение). -buildmode = общий Объединить все перечисленные удобства -основные пакеты в одной общей библиотеке , которая будет использоваться при строительстве с - linkshared вариант. Пакеты с именем основной игнорируются. -buildmode = ех Построить перечисленные основные пакетов и все , что они импортируют в исполняемые файлы. Пакеты не названные основной игнорируются. -buildmode = пирог Построить перечисленные основные пакеты и все , что они импортируют в позиции независимых исполняемых файлов (PIE). Пакеты не названные основной игнорируются. -buildmode = плагин Сборка перечисленных основных пакетов, а также все пакеты , которые они импорт, в плагин Go. Пакеты не названные основной игнорируются.
В MacOS мы используем режим разделяемые, но дисплей не поддерживаются, мы заменили платформу Linux экспериментировать:
➜ ЦСИ идут установить -buildmode = общий yxpkg -buildmode = разделяемая не поддерживается на Дарвине / amd64
Создание libstd.so библиотеки:
корень @ докер ~ / пойти # пойти установить -buildmode = разделяемая зЬй
Создание библиотеки так yxpkg пакет:
корень @ докер ~ / пойти # пойти установить -buildmode = общий -linkshared yxpkg
Обобщение main.go сгенерированный динамически связанный исполняемый файл:
корень @ докер ~ / г / SRC # идти строить -linkshared yaoxu.go
Мы сравнили сгенерированный ранее статически скомпонованный исполняемый файл: найти свой размер исполняемого файла, сильно различаются;
корень @ Докер ~ / г / SRC # LL общая 1.9M -rwxr-XR-х. 1 корень корень 22K августу 29 17 : 17 yaoxu * -rw-р - r--. 1 корень корень 87 Августа 29 16 : 57 yaoxu.go drwxr -xr-х. 2 корня корень 4 .0K Август 29 16 : 27 yxpkg / -rwxr-хт-х. 1 корень корень 1.9M Август +29 16 : 57 yx_static *
Мы используем LDD увидеть два файла:
Видимый, эти два документа являются динамической связь файлов, файл статически.
Что следует отметить, что, идет быть связанно динамически во время компиляции, или нужна помощь для компиляции исходного кода, я думаю, что основная причина заключается в создании таблицы символов.
Есть некоторые конкретные детали, вы можете настроить свою собственную среду, чтобы испытать себя;
Структура каталога скомпилированного рабочей области выглядит следующим образом:
Отличающееся тем, yxpkg содержимого файла пакет, yaoxu.go, используемое для функционирования yxpkg пакета;
код зоны работы можно найти в следующих цепях: https://github.com/yaowenxu/Workplace/tree/master/go
Будьте в курсе, если полезно для вас, пожалуйста, обратите внимание cnblogs.com/xuyaowen