2017-03-28 38 views
2

Tensorflowを使用する共有ライブラリを作成しています。一緒にTensorflow:共有ライブラリとの動的リンク

cc_binary(
    name = "recognizer.so", 
    srcs = glob(["recognizer.cpp"]), 
    linkshared = 1, 
    deps = [ 
     "//tensorflow:сore" 
    ], 
) 

すべてのリンクをしかし、私は約94メガバイトのサイズではなくlibtensorflow_cc.soに依存する共有ライブラリで終わる:今の私は、次のビルドファイルとサブプロジェクトとしてTensorflowのソースツリーにそれを置きます。実際にlibtensorflow_cc.soが構築されたバイナリもありません。

ターゲットは//tensorflow:libtensorflow_cc.soです。これはcc_binaryとして宣言されています。これは(バゼルによれば)私はそれに依存できないことを意味します。さらに、このターゲットは実際には非公開です。つまり、ビルドできますが、別のサブプロジェクトからは参照できません。少なくともバゼルで。

このような単純なことを行う方法はありますか?

+0

あなたはどのOSですか? '--cpu'フラグの値があれば、それをBazelに渡しますか? –

+0

私はLinuxを使っています。 --cpuフラグがBazelに渡されなかった –

+0

libtensorflow_cc.soに依存する共有ライブラリとしてカスタムコードをビルドしたいのですか? – mhlopko

答えて

1

なぜlibtensorflow.soまたはlibtensorflow_cc.soが:internalであるのかについてはコメントできません。しかし、cc_binaryによって作成された共有ライブラリに依存するためには、Bazelで行うことができるトリックがあります:それをccルールのソースとして宣言してください。

cc_binary(
    name = "liba.so", 
    srcs = [ "a.cc" ], 
    linkshared = 1 
) 

cc_binary(
    name = "main", 
    srcs = [ "main.cc", "liba.so" ], 
) 

さて、これは実際には非常にサポートされていない:)で、我々は、次の数ヶ月で共有ライブラリを扱う方法を変更しようとしているので、私はほとんどそれが壊れるあなたを約束することができます。 https://github.com/bazelbuild/bazel/issues/1920に登録するか、bazel-dev @に従って更新することができます。

+0

#LCM共有ライブラリパス cc_binary( 名= "liblcm.so"、 SRCS = [ "LIB/liblcm.so"]、 コプト教徒= [ "-I/visibility = ["visibility:public"] liblcm.soをビルドファイルに含めることを試みていますが、 bazelは私にlcm/liblcm.soという入力ファイルがないと伝えます。私は上記の.ccファイルを変換する上記の方法を試しましたが、それは私のためには機能しませんでした – Pototo

+0

それは別の問題のように聞こえる、質問を作成してより多くのコンテキストを提供できますか? – mhlopko

関連する問題