CMake生成的TensorFlow Lite 2.4.1共享库无法正常使用问题咨询
Debian 10 编译 TensorFlow Lite 2.4.1 C++ 动态库解决方案
前提说明
- 系统环境:Debian 10
- 编译对象:TensorFlow Lite 2.4.1 源码
- 需求:生成可正常运行的C++版本TFLite动态库,替换官方默认生成的静态库
核心问题原因
默认TFLite的CMake配置未开启共享库导出规则,直接仅修改BUILD_SHARED_LIBS参数生成的动态库会因为核心符号隐藏、依赖无位置无关代码等问题无法正常调用。
正确修改CMake配置步骤
- 开启共享库构建与位置无关代码编译
打开tensorflow/lite/CMakeLists.txt,在文件最开头的项目配置段添加如下配置:
# 开启动态库构建 set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries" FORCE) # 全局开启位置无关代码,解决依赖链接重定位错误 set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "Build with PIC" FORCE) # 关闭符号默认隐藏规则,导出动态库需要的公开符号 set(CMAKE_CXX_VISIBILITY_PRESET default) set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF) # 定义TFLite动态库编译宏,匹配源码内的导出标记 add_compile_definitions(TFLITE_SHARED_LIBRARY)
- 调整链接规则
找到TFLite核心库的add_library定义段,确保所有依赖的静态库(如flatbuffers、abseil等)都被完整链接到动态库中,避免运行时依赖缺失:
# 找到对应add_library行,修改为如下格式确保链接所有依赖 add_library(tensorflow_lite ${TFLITE_SRCS}) target_link_libraries(tensorflow_lite PRIVATE # 原有依赖项保持不变,确保所有静态依赖都在此处声明 ${TFLITE_DEPENDENCIES} )
- 重新执行编译流程
# 清理原有构建缓存 rm -rf build && mkdir build && cd build # 执行CMake配置 cmake ../tensorflow/lite # 并行编译,可根据CPU核心数调整-j后的数值 make -j4
生成结果验证
编译完成后在build目录下生成libtensorflowlite.so,执行如下命令验证可用性:
- 检查依赖完整性:
ldd libtensorflowlite.so,无not found的依赖项即为正常 - 检查核心符号导出:
nm -D libtensorflowlite.so | grep TfLiteInterpreter,有输出结果说明核心API已正常导出
内容的提问来源于stack exchange,提问作者Bhaskar Sarma
相关产品推荐
相关产品推荐

