Бинарная библиотека не включает зависимости - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь создать бинарную библиотеку, которая включает в себя некоторые зависимости.Сама сборка бинарной библиотеки идет отлично, но на самом деле она не включает мои зависимости: когда я пытаюсь использовать библиотеку в системе без установленных зависимостей, я получаю сообщение об ошибке, в котором говорится, что они отсутствуют.

Для справки, команда, которую я использую для создания библиотеки:

go build -o build/pkg/<os>_<arch>/<path/to/binary>.a

Затем я записываю свой заглушку <library>.go файл в build/src/<path/to/binary>.go.

Файл-заглушка содержит тупые реализации всех открытых методов и блок import для его зависимостей, причем каждая зависимость включена в этот блок импорта.

Файл-заглушка также имеет // go:binary-only-packageстрока над директивой package.

Если есть способ создать двоичную библиотеку, которая будет включать ее зависимости, я был бы признателен за это!

1 Ответ

0 голосов
/ 31 мая 2018

Как вы знаете, go компилирует пакеты в отдельные архивные файлы и создает двоичный файл из них.Недавно Go позволил вам предоставлять только архивы без исходного кода (обычно go перекомпилирует из исходного кода, если исходный код более новый).

Можно объединить несколько архивов в один, как описано здесь:

Как объединить две статические библиотеки "ar" в одну

Проблема в том, что компилятор go найдет символы, используя структуру папок и файлов, соответствующую именам пакетов.Таким образом, если вы объединяете архивы, компилятор go больше не сможет находить символы при сборке двоичного файла.Только один из пакетов будет доступен в зависимости от расположения архива.Поэтому невозможно выполнить то, что вы запрашиваете, по крайней мере с текущей поддержкой компилятора go.

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