首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CMakeLists.txt of C++项目中包括tensorflow lite库,从而产生错误“未定义的对‘`ruy::ScopedSuppressDenormals’的引用”

在CMakeLists.txt of C++项目中包括tensorflow lite库,从而产生错误“未定义的对‘`ruy::ScopedSuppressDenormals’的引用”
EN

Stack Overflow用户
提问于 2022-04-13 04:06:45
回答 3查看 879关注 0票数 1

我试图在CMakeLists.txt of C++项目中包含C++ lite库。我遵循了https://www.tensorflow.org/lite/guide/build_cmake的instructure

git克隆tensorflow_src

  • mkdir tflite_build && cd tflite_build

  • cmake ./tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_XNNPACK=OFF -DTFLITE_ENABLE_EXTERNAL_DELEGATE=OFF TFLITE_RUY=ON/OFF(尝试了两种option)

  • cmake -构建)。-配置发布-j24

并将所有库添加到CmakeLists.txt文件中,如下所示

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.0)
project(main)

set(TENSORFLOW_SRC_DIR "test_cpp/tensorflow_src")
set(TFLITE_DIR "test_cpp/tflite_build")

find_package(OpenCV 4 REQUIRED)

file(GLOB SOURCE_FILES src/*.cpp  src/*.h )
message(${SOURCE_FILES})
add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES})

include_directories(
    ${TENSORFLOW_SRC_DIR}
    ${TFLITE_DIR}/eigen
    ${TFLITE_DIR}/neon2sse
    ${TFLITE_DIR}/abseil-cpp
    ${TFLITE_DIR}/farmhash/src
    ${TFLITE_DIR}/flatbuffers/include
    ${TFLITE_DIR}/gemmlowp/public
    ${TFLITE_DIR}/gemmlowp
    ${TFLITE_DIR}/ruy
    ${TFLITE_DIR}/cpuinfo/include
)

target_link_libraries(
    ${CMAKE_PROJECT_NAME} PUBLIC
    ${OpenCV_LIBS}

    ${TFLITE_DIR}/_deps/farmhash-build/libfarmhash.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_marshalling.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_program_name.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_reflection.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_private_handle_accessor.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_config.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_commandlineflag_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags_commandlineflag.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/flags/libabsl_flags.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_functions.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_strings_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_handle.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_str_format_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_cordz_info.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_cord.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_cord_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/strings/libabsl_strings.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/container/libabsl_raw_hash_set.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/container/libabsl_hashtablez_sampler.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/synchronization/libabsl_synchronization.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/synchronization/libabsl_graphcycles_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/hash/libabsl_city.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/hash/libabsl_hash.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/hash/libabsl_low_level_hash.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/time/libabsl_civil_time.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/time/libabsl_time_zone.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/time/libabsl_time.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/profiling/libabsl_exponential_biased.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/types/libabsl_bad_optional_access.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/types/libabsl_bad_variant_access.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/numeric/libabsl_int128.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_raw_logging_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_throw_delegate.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_base.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_log_severity.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_spinlock_wait.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/base/libabsl_malloc_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/status/libabsl_status.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/debugging/libabsl_stacktrace.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/debugging/libabsl_demangle_internal.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/debugging/libabsl_symbolize.a
    ${TFLITE_DIR}/_deps/abseil-cpp-build/absl/debugging/libabsl_debugging_internal.a
    ${TFLITE_DIR}/_deps/flatbuffers-build/libflatbuffers.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_ctx.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_kernel_avx.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_have_built_path_for_avx512.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_cpuinfo.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_frontend.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_blocking_counter.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_kernel_avx512.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_apply_multiplier.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_block_map.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_trmul.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_kernel_avx2_fma.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/profiler/libruy_profiler_instrumentation.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_denormal.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_prepacked_cache.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_system_aligned_alloc.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_context_get_ctx.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_allocator.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_have_built_path_for_avx2_fma.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_pack_avx.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_wait.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_context.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_pack_avx2_fma.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_thread_pool.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_pack_arm.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_tune.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_kernel_arm.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_have_built_path_for_avx.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_prepare_packed_matrices.a
    ${TFLITE_DIR}/_deps/ruy-build/ruy/libruy_pack_avx512.a
    ${TFLITE_DIR}/_deps/fft2d-build/libfft2d_fftsg.a
    ${TFLITE_DIR}/_deps/fft2d-build/libfft2d_fftsg2d.a
    ${TFLITE_DIR}/_deps/clog-build/libclog.a
    ${TFLITE_DIR}/_deps/cpuinfo-build/libcpuinfo.a
    ${TFLITE_DIR}/libtensorflow-lite.a

    dl
)

它在windows机器上工作,但在Linux上,我遇到了错误

对`ruy::ScopedSuppressDenormals::ScopedSuppressDenormals()'的未定义引用

代码语言:javascript
复制
[ 33%] Building CXX object CMakeFiles/main.dir/src/main.cpp.o
[ 66%] Building CXX object CMakeFiles/main.dir/src/ssd_mobilenet_tflite.cpp.o
[100%] Linking CXX executable main
/usr/bin/ld: ../tflite_build/libtensorflow-lite.a(interpreter.cc.o): in function `tflite::Interpreter::Invoke()':
interpreter.cc:(.text+0x3ff): undefined reference to `ruy::ScopedSuppressDenormals::ScopedSuppressDenormals()'
/usr/bin/ld: interpreter.cc:(.text+0x523): undefined reference to `ruy::ScopedSuppressDenormals::~ScopedSuppressDenormals()'
/usr/bin/ld: ../tflite_build/libtensorflow-lite.a(interpreter.cc.o): in function `tflite::Interpreter::Invoke() [clone .cold]':
interpreter.cc:(.text.unlikely+0x5c): undefined reference to `ruy::ScopedSuppressDenormals::~ScopedSuppressDenormals()'
/usr/bin/ld: CMakeFiles/main.dir/src/ssd_mobilenet_tflite.cpp.o: in function `SSD_MOBILENET::loadModel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
ssd_mobilenet_tflite.cpp:(.text+0x2b2): undefined reference to `tflite::ops::builtin::BuiltinOpResolver::BuiltinOpResolver()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/main.dir/build.make:231: main] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

我不想像指南中给出的那样将库添加为"add_subdirectory“,因为它每次创建新项目时都会编译

那么,如何解决对`ruy::ScopedSuppressDenormals::ScopedSuppressDenormals()'未定义引用?

更新:

如果我将CMakeLists.txt更改为:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0.0)
project(main)
set(TENSORFLOW_SRC_DIR "test_cpp/tensorflow_src")
set(TFLITE_DIR "test_cpp/tflite_build")
find_package(OpenCV 4 REQUIRED)
find_package(TFLITE)
file(GLOB SOURCE_FILES src/*.cpp  src/*.h )
message(${SOURCE_FILES})
add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES})
include_directories(
    ${TENSORFLOW_SRC_DIR}
)
target_link_libraries(
    ${CMAKE_PROJECT_NAME} PUBLIC
    ${OpenCV_LIBS}
    ${TFLITE_LIBS}
)

我接受这个错误

代码语言:javascript
复制
from test_cpp/src/main.cpp:1:
test_cpp/tensorflow_src/tensorflow/lite/interpreter_builder.h:26:10: fatal error: flatbuffers/flatbuffers.h: No such file or directory
       26 | #include "flatbuffers/flatbuffers.h"  // from @flatbuffers
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [CMakeFiles/main.dir/build.make:63: CMakeFiles/main.dir/src/main.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/main.dir/all] Error 2
    make: *** [Makefile:84: all] Error 2
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-21 15:13:26

我发现这个回购文件包含了项目https://github.com/muhammedakyuzlu/tflite-cpp-package所需的所有库

票数 0
EN

Stack Overflow用户

发布于 2022-06-08 22:50:53

我相信你的问题是理发师的排序。尝试将libtensorflow-lite.a置于设置中的ruy-*.a之前。

票数 0
EN

Stack Overflow用户

发布于 2022-10-31 08:34:06

还有一个窍门可以帮你开始。只需将此添加到您的CMake文件:

代码语言:javascript
复制
include(FetchContent)
FetchContent_Declare(
        tensorflow
        GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
        GIT_PROGRESS TRUE
        GIT_SHALLOW TRUE
        GIT_TAG v2.10.0
        SOURCE_SUBDIR tensorflow/lite
)
FetchContent_MakeAvailable(tensorflow)

并链接到图书馆:

代码语言:javascript
复制
target_link_libraries(${PROJECT_NAME} PRIVATE
        tensorflow-lite
)

这是自动下载所有依赖项,并应使您做好准备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71851749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档