2017-02-06 14 views
0

Я строю библиотеку Android, основанную на Tensorflow с Bazel.Являются ли линкерные флаги (linkopts) распространенными в Базеле?

Здесь 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

Я получил ответ от трекера о проблемах с тензорным потоком.

@jart

С коптами и linkopts являются вирусными и распространяются на зависимости, -lpthread, скорее всего, наследуются от @boringssl //: крипто

@andrewharp

- lpthread не требуется или не может быть на Android, так что похоже, что решение будет заключаться в добавлении другого условия для оператора select как в связанный фиксации google/protobuf#1386:

...

Единственный обходной путь я знаю, что не требует редактирования другого хранилища, чтобы создать манекен libpthread.so цели, но это довольно Hacky.

 Смежные вопросы

  • Нет связанных вопросов^_^