2017-02-06 39 views
0

我正在用Bazel建立一個基於Tensorflow的Android庫。鏈接器標誌(linkopts)在Bazel中傳播嗎?

這裏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 ...

哪裏他們來自哪裏嗎?有沒有解決方法?

+0

C++編譯器配置也可以指定鏈接器選項,這可能是在這裏發生的。您是否使用內置的NDK規則將其編譯爲Android?你可以顯示你正在運行的Bazel命令嗎? –

+0

@UlfAdams我已經從你的同事那裏得到了答案。見下面的答案。您可能會在github問題中找到該命令。 –

回答

0

我從tensorflow的問題跟蹤器中得到了答案。

@jart

由於科普特和linkopts是病毒和傳播到依賴關係,-lpthread是最有可能被從@boringssl //繼承:加密

@andrewharp

- lpthread在Android上不是必需或可能的,所以聽起來像解決方案將爲select語句添加另一個條件在鏈接提交google/protobuf#1386:

...

的僅有的解決方法,我知道的,不需要編輯其他存儲庫是創建一個虛擬libpthread.so的目標,但是這是相當哈克。