我最终手动为CMake列出了所有必要的TFLite对象文件 target_link_libraries (在里面 TFLite_LIBS )它的工作原理。
target_link_libraries
TFLite_LIBS
我使用一个简单的shell脚本来获取必要的目标文件列表。 首先,我将构建日志中的所有未定义引用收集到bash-array中,如下所示:
SYMBOLS=(\ 'tflite::CombineHashes('\ 'tflite::IsFlexOp('\ 'tflite::ConvertArrayToTfLiteIntArray('\ 'tflite::EqualArrayAndTfLiteIntArray('\ ... 'tflite::ConvertVectorToTfLiteIntArray(')
然后,对于该阵列中的每个符号,我都经历了每一个 *.o bazel构建输出中的文件:
*.o
for SYMBOL in $SYMBOLS[@]; do for OBJ in $(find -L /path/to/tensorflow/bazel-bin/ -name '*.o'); do nm -C $OBJ | grep "T $SYMBOL" > /dev/null && echo $OBJ done done | sort | uniq
并将输出添加到 TFLite_LIBS 在CMake中(当然有正确的路径前缀)。之后,我获得了一部分未定义的引用,但经过几次迭代后,它解决了所有问题。
也许我还可以从中获取完整的依赖列表 *-params 来自我最初的in-tree构建的文件,但是快速检查显示它有一些冗余项目,并且脚本只收集了必要的内容。
*-params
对于包含位置,我将该硬编码路径替换为bazel缓存中的flatbuffers ${TENSORFLOW_DIR}/bazel-tensorflow/external/flatbuffers/include/ 。谢谢 jdehesa 提示。
${TENSORFLOW_DIR}/bazel-tensorflow/external/flatbuffers/include/
其他答案仍然非常感谢!