如何编写适配LibTensorFlow的CMakeLists.txt构建配置文件
问题原因
当前CMake配置存在3个核心问题,直接导致编译失败:
- 未配置LibTensorFlow头文件包含目录,编译器无法找到
tensorflow/c/c_api.h,这是本次报错的直接原因。手动g++编译时通过-I${path_libtf}/include参数指定了头文件路径,但现有CMake规则没有对应配置 find_library写死了本机绝对路径,项目迁移存放目录后会直接失效- 未配置运行时动态库搜索路径,且漏链
libtensorflow_framework.so依赖,即使解决头文件问题,编译完成后运行时也会报动态库找不到的错误
修改方案
根目录CMakeLists.txt
替换为以下内容,统一定义LibTensorFlow路径,配置全局编译、运行时规则:
cmake_minimum_required(VERSION 3.11) project( SampleLibTensorFlow VERSION 0.1 DESCRIPTION "Sample code for LibTensorFlow" LANGUAGES CXX) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 定义LibTensorFlow相对路径,适配任意项目存放位置 set(LIBTF_ROOT ${PROJECT_SOURCE_DIR}/lib_ext/libtensorflow_cpu) set(LIBTF_INCLUDE_DIR ${LIBTF_ROOT}/include) set(LIBTF_LIB_DIR ${LIBTF_ROOT}/lib) # 配置RPATH,运行时无需手动设置LD_LIBRARY_PATH即可找到动态库 set(CMAKE_BUILD_RPATH ${LIBTF_LIB_DIR}) add_subdirectory(app)
app目录下的CMakeLists.txt
替换为以下内容,补全头文件包含规则,正确链接依赖库:
file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) add_executable(program ${SRC_FILES}) # 添加头文件搜索路径 target_include_directories(program PRIVATE ${LIBTF_INCLUDE_DIR}) # 查找所需的两个TensorFlow动态库 find_library(TF_CORE_LIB NAMES tensorflow HINTS ${LIBTF_LIB_DIR} REQUIRED) find_library(TF_FW_LIB NAMES tensorflow_framework HINTS ${LIBTF_LIB_DIR} REQUIRED) # 链接依赖库 target_link_libraries(program PRIVATE ${TF_CORE_LIB} ${TF_FW_LIB})
构建验证
在项目根目录执行以下命令即可完成构建运行:
cd build rm -rf * cmake .. make -j8 ./bin/program
执行成功后终端会输出当前LibTensorFlow的版本号,例如LibTensorFlow Version: 2.8.0。
内容的提问来源于stack exchange,提问作者Vujadeyoon
相关产品推荐
相关产品推荐

