/ / Warum unterbricht Bazel und wie kann ich es beheben? - Bazel

Warum unterbindet Bazel und wie kann ich es beheben? - Bazel

Ich versuche zu bauen und zu verpacken LCM mit Bazel. Dies funktioniert für den "build" -Teil, aber das Endergebnis ist eine Bibliothek, die von externen Konsumenten nicht verwendet werden kann (d. H. "Package" schlägt fehl, weil das Paket beschädigt ist).

LCM verwendet glib, mit dem ich importiere pkg_config_package (blutige Details). Insbesondere verwendet LCM Glib im Inneren, macht dies jedoch nicht für Benutzer sichtbar. Das bedeutet, dass Verbraucher sollten Glib nicht verknüpfen müssen; liblcm.so sollte dies tun, und die Verbraucher sollten nur eine Verbindung zu LCM selbst herstellen müssen.

All dies funktioniert hervorragend mit Upstream (der CMake und Does The Right Thing verwendet). Bazel scheint jedoch keine Verbindung herzustellen liblcm.so aus irgendeinem unbekannten Grund zu glänzen. Wenn ich mit Bazel eine ausführbare Datei in derselben Gesamtumgebung errichte, scheint Bazel zu wissen, dass Benutzer von LCM auch eine Verbindung zu glib herstellen müssen. Wenn ich jedoch versuche, dieses LCM für die externe Verwendung zu verpacken, ist es defekt, weil liblcm.so isn "t ist nicht an glib gebunden, was die Verbraucher zwingt, mit LCMs umzugehen Privatgelände Glib Abhängigkeit.

Warum verknüpft Bazel die LCM-Bibliothek nicht mit glib und wie kann ich das Problem beheben?

(p.s. Wir haben ähnliche Probleme mit Libbot ...)

Antworten:

0 für die Antwort № 1

Anscheinend ist dies ein bekanntes Problem: https://github.com/bazelbuild/bazel/issues/492.

Ich kann das nicht einfach machen cc_library ein cc_binaryentweder, weil - obwohl dies die Unterverknüpfung beheben würde - ich die Bibliothek nicht in anderen Bazel-Zielen verwenden kann cc_binary das wickelt ein cc_library, weil dann interne und externe Verbraucher nicht dieselbe Bibliothek verwenden.


-1 für die Antwort № 2

Statische Bibliotheken sind nicht mit anderen statischen Bibliotheken verknüpft. Beim Erstellen über Bazel verfolgt Bazel die Abhängigkeiten und stellt beim Erstellen der ausführbaren Datei eine Verknüpfung mit allen abhängigen Bibliotheken her.

Weitere Informationen zum Verknüpfen statischer Bibliotheken finden Sie hier: Statische Bibliotheken mit anderen statischen Bibliotheken verknüpfen

Ein interessanter Vorschlag, der angesprochen wurde, ist das Aufheben der Archivierung beider Bibliotheken und das Erstellen einer neuen Bibliothek mit allen .o-Dateien. Dies könnte möglicherweise in einem Genre erreicht werden.