Альтернатива "` -whole-archive`"в базеле
Я хочу связать внешнюю статическую библиотеку в одном из моих базированных проектов C++. Я нуждаюсь "whole-archive
"опция для связывания библиотеки как gcc или g++ build:
g++ main.cc -Wl,--whole-archive -lhttp -Wl,--no-whole-archive
Кто-нибудь может подсказать, что является альтернативой--whole-archive
в базель?
2 ответа
К сожалению, Alwayslink не работает с предварительно скомпилированными библиотеками, только с cc_library
составлено и связано Базелем. Есть один недокументированный хак (я думаю, я просто документирую это, упоминая его здесь), и он должен переименовать файл.a в файл.lo. Тогда Базель свяжет это как целый архив.
Остерегайтесь, что это взлом, и перестанет работать без предупреждения. У нас есть планы на некоторые варианты cc_import
Правило именно для этого варианта использования, чтобы импортировать предварительно скомпилированный двоичный файл в рабочую область с возможностью установить всю архивность на нем. Это просто еще не там.
https://bazel.build/versions/master/docs/be/c-cpp.html
alwayslink
Boolean; необязательный; nonconfigurable; по умолчанию 0
Если 1, любой двоичный файл, который зависит (прямо или косвенно) от этой библиотеки C++, будет связывать все объектные файлы для файлов, перечисленных в srcs, даже если некоторые из них не содержат символов, на которые ссылается двоичный файл. Это полезно, если ваш код явно не вызывается кодом в двоичном коде, например, если ваш код регистрируется для получения некоторого обратного вызова, предоставляемого какой-либо службой.