GO с использованием динамической библиотеки (общие библиотеки) для компиляции динамически связанный исполняемый файл

Мы использовали пойти помочь buildmode может увидеть идти можно построить различные способы, используя статическую библиотеку ссылок по умолчанию.

➜ ЦСИ пойти помочь buildmode « идти строить » и « идут установить » команды принимают -buildmode аргумент , который 
указывает , который вид объекта  файла должен быть построен. В настоящее время поддерживаются значения 
являются:

     -buildmode = архив 
        Постройте перечисленные Некоммерческий - основные пакеты в .a файлы. Пакеты с именем 
        основной игнорируются. 

    -buildmode = c- архив 
        сборки перечисленного основной пакета, а также все пакеты, которые импортируют, 
        в архиве C файловых . Только Вызываемые символы будут те
        функции экспортируются с использованием ОЦП // экспорт комментарий. Требуется 
        ровно один основной пакет будет в списке. 

    -buildmode = c- совместно 
        построить перечисленную основной пакет, а также все пакеты, которые импортирует, 
        в C разделяемую библиотеку. Только Вызываемые символы будут 
        иметь те функции , экспортируемые с помощью ОЦП // экспорта комментария. 
        Требуется ровно один основной пакет будет в списке. 

    -buildmode = по умолчанию 
        Перечислены основные пакеты встроены в исполняемые файлы и перечислены 
        не - основные пакеты встроены в .a файлы (по умолчанию 
        поведение). 

    -buildmode = общий
        Объединить все перечисленные удобства  -основные пакеты в одной общей 
        библиотеке , которая будет использоваться при строительстве с - linkshared 
        вариант. Пакеты с именем основной игнорируются. 

    -buildmode = ех 
        Построить перечисленные основные пакетов и все , что они импортируют в 
        исполняемые файлы. Пакеты не названные основной игнорируются. 

    -buildmode = пирог 
        Построить перечисленные основные пакеты и все , что они импортируют в 
        позиции независимых исполняемых файлов (PIE). Пакеты не названные 
        основной игнорируются. 

    -buildmode = плагин 
        Сборка перечисленных основных пакетов, а также все пакеты , которые они
        импорт, в плагин Go. Пакеты не названные основной игнорируются.
GO buildmode

В 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

 

рекомендация

отwww.cnblogs.com/xuyaowen/p/go-build-dynamic-lib.html