Какая связь между / usr / lib / golang / sr c и / usr / lib / golang / pkg - PullRequest
0 голосов
/ 07 апреля 2020

Если я устанавливаю дистрибутивные пакеты для Go, я вижу много файлов в /usr/lib/golang/pkg и очень похожий набор файлов в /usr/lib/golang/src. Какова взаимосвязь между этими двумя наборами?

Является ли pkg скомпилированной библиотекой, созданной из исходного кода src?

Предполагается, что программа Go использует стандартные пакеты, такие как fmt, нужна ли скомпилированная библиотека в pkg для запуска Go программ? Нужно ли компилировать Go программы? Нужен ли источник в src для компиляции Go программ?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Дерево Go установки pkg содержит несколько различных вещей:

  • В дереве pkg/tool есть сам компилятор Go и другие связанные инструменты. Это двоичные файлы для определенных комбинаций os-arch . Это, конечно, совершенно необходимо для сборки go программного обеспечения.
  • Также будет одно или несколько деревьев os-arch с скомпилированными библиотеками для go stdlib , Для установки go, предназначенной для кросс-компиляции, это не будет той же комбинацией os-arch, что и в pkg/tool.
  • В pkg/include. Есть также некоторые заголовочные файлы C.

В дереве Go установки src есть несколько различных вещей:

  • В src/cmd есть источник для компилятора и инструментов Go , Этот источник не нужен для сборки go программного обеспечения.
  • В других местах src является источником для go stdlib. Это также необходимо для сборки программного обеспечения.

Библиотеки и исполняемые файлы в pkg были созданы для указания c os-arch комбо (ов) из источников в src.

Библиотеки не нужны для сборки программного обеспечения, так как go будет перестраиваться из источника. Исполняемые файлы необходимы, и система сборки go будет использовать их.

Исходный код для компилятора в src не требуется. Источник для go stdlib необходим , по крайней мере, для всех практических целей. go build будет настаивать на поиске источника и откажется от сборки, если его нет, даже если доступна подходящая скомпилированная библиотека.

Была поддержка только двоичных пакетов от go 1.7 до go 1.12, но оно было отброшено.

1 голос
/ 07 апреля 2020

sr c

Этот каталог содержит исходные файлы, организованные в виде пакетов.

pkg

Этот каталог содержит Go объекты пакетов, скомпилированные из каталога sr c Go пакеты с исходным кодом. Если пакет не содержит файл с объявлением пакета main, Go создает файл архива пакета (.a) в каталоге pkg. Объект пакета используется во время компоновки для создания полного исполняемого двоичного файла Go в каталоге bin.

Поэтому, как только мы скомпилируем пакет, мы сможем связать этот объект во многих исполняемых файлах. Например, fmt - это скомпилированная библиотека в pkg, поэтому нет необходимости снова компилировать. Мы можем связать этот объект для запуска всех Go программ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...