bazel生成C++ダイナミックリンクライブラリsoファイル

2049 ワード

bazelはGoogleオープンソースのコンパイルツールで、多くの言語をサポートし、コンパイル速度が速く、処理が便利で、コンパイルルールを書くのが簡単な利点があります.
bazelはごろつきの道具だと言われていますが、なぜですか.それはQJあなたたちのグループだけでなく、QJあなたの兄弟グループもあるからです.1つのグループはbazelを使用し、他のグループは協同作業のためにbazelを使用しなければならない.そうしないと、プロジェクト全体として管理できない.
これはある程度正しいです.1つのプロジェクトが1つの全体にパッケージ化されたいため、一部がbazelコンパイルを使用し、もう一部がmakefileコンパイルを書くと、この2つの部分は完全なダイナミックリンクライブラリを生成して外部に使用することはできません.
次に、1つのプロジェクトが複数のダイナミックリンクライブラリをパッケージ化することを受け入れることができますか?納得できれば、プロジェクトの一部がbazelでコンパイルされ、もう一部がmakefileでコンパイルされている場合でも管理できます.bazelを使用するとダイナミックリンクライブラリsoファイルが生成されるので、makefileでもいいので、2つを一緒に置くと問題が解決します.
この記事では、bazelを使用してC++ダイナミックリンクライブラリファイルを生成する方法について簡単に説明します.
必要な前提知識は:1.gccのコンパイルとリンクコマンドを熟知している.2.bazelの使い方を熟知し、WORKSPACEとBUILDファイルの役割を知っている.3.bazelのルールに詳しい、例えばcc_binary,cc_import、参考にできますhttps://docs.bazel.build/versions/master/be/c-cpp.html
bazelを使用してダイナミックリンクライブラリファイルを生成するのは簡単ですが、cc_を使用します.binaryルールでいいです.bazelのC++ルールファイルをよく読むと、このようなルールを追加すればいいことがわかります.
cc_binary(
name = "libmylib.so", #mylib       
srcs = ["mylib.cpp",
    "mylib.h", #       ,    
],
deps = ["//XX:XX", #  ,            include       BUILD     
],
copts = ["-g"#       
],
linkopts = ["-lstdc++", #       
],
linkshared = True,
linkstatic = True,
)

上記のルールを作成した後、WORKSPACEディレクトリでbazel build //XX:libmylib.soを実行すると、このプロジェクトの動的コンパイルライブラリファイルが得られます.
ダイナミックコンパイルライブラリファイルのリンクファイルを表示します.libmylib.soディレクトリにldd libmylib.soと入力するとlibmylibが表示されます.soは正常に呼び出され、どの場所でより下位のダイナミックリンクライブラリファイルを見つける必要があるか、このディレクトリに基づいて新しい環境に対応する依存をインストールすることができ、libmylib.soは正常に動作します.