私はビルドして、LCMをBazelとパッケージ化しようとしています。これは「ビルド」部分で機能しますが、最終的には外部のコンシューマーが使用できないライブラリ(パッケージが壊れているため「パッケージ」に失敗します)が発生します。なぜBazelはアンダーリンクしていて、どうすれば修正できますか?
LCMは、pkg_config_package
(gory details)でインポートしているglibを使用しています。具体的には、LCMはglib を内部でと使用しますが、ユーザーには公開しません。つまり、の消費者はglibをリンクする必要はありません。 liblcm.so
はこれを行う必要があり、消費者はLCM自体にリンクするだけでよい。
これはすべて上流(CMakeを使用し、正しいことをする)でうまく動作します。しかし、Bazelは、何らかの未知の理由のために、liblcm.so
をglibにリンクしていないようです。私が同じ全体的な環境内でBazelで実行可能ファイルをビルドすると、BazelはLCMのユーザーもglibにリンクする必要があることを知っているようです。しかし、このLCMを外付けでパッケージ化しようとすると、liblcm.so
がglibにリンクされていないため、LCMのプライベート glib依存関係に対処する必要があります。
なぜBazelはLCMライブラリをglibにリンクしていないのですか?どうすれば修正できますか?
(P.S.私たちはlibbotと同様の問題を持っている...)
厳密にはそうではありませんが、hackishですが、.soをcc_library/cc_binaryのsrcsに入れても動作します(bazelにプリコンパイルされたライブラリについて知らせる現在の仕組みです)。しかしそれは表現力が十分ではないので、問題#492で言及されている「推移的図書館」を研究しています。全体として、bazelは「オープンソースの世界で発展する」ことで多くの点で改善する必要があります。 – mhlopko