链接器标志(linkopts)是否在Bazel中传播?

时间:2017-02-06 13:40:33

标签: android tensorflow bazel

我正在使用Bazel构建一个基于Tensorflow的Android库。

此处为BUILD文件

cc_binary(
    name = "libfoo.so",
    srcs = glob([
         "jni/**/*.cc",
         "jni/**/*.h",
    ]),
    copts = [ "-fexceptions", "-DEIGEN_AVOID_STL_ARRAY",
              "-mfpu=neon", "-std=c++11",
              "-DMIN_LOG_LEVEL=0", "-DTF_LEAN_BINARY",
              "-O2", ],
    linkopts = [
        "-llog",
        "-lm",
    ],
    linkshared = 1,
    deps = [
        "@org_tensorflow//tensorflow/core:android_tensorflow_lib",
        "@boringssl//:crypto",
    ],
)

链接器抱怨找不到-lpthread,而我没有将此标记添加到linkopts

我已经检查了执行的命令,实际上还有额外的标志:-lz -lpthread ...

他们是从哪里来的?有解决方法吗?

1 个答案:

答案 0 :(得分:0)

我从tensorflow的问题跟踪器那里得到了答案。

@jart

  

由于copts和linkopts是病毒式传播并传播到依赖关系,-lpthread很可能是从@boringssl继承//:crypto

@andrewharp

  

-ppread在Android上没有必要或不可能,所以听起来解决方案是为链接提交google/protobuf#1386:

中的select语句添加另一个条件      

...

     

我所知道的唯一其他解决方法不需要编辑其他存储库就是创建一个虚拟的libpthread.so目标,但这非常hacky。