最新的4.17.0版本的Hailort,在Windows下基于Hailort编译运行demo时,有时客户会反馈以下报错:

经过测试验证发现,只有当应用程序在x64-Debug模式下编译调试C++ API接口时才会有此报错。如果使用C API接口或者x64-Release模式下则没有此报错。
这个问题与Hailort C++接口中使用了STL有关,因为我们正常安装的libhailort.dll是Release版本,如果使用Debug模式编译应用程序,则会出现兼容性问题。
解决方式:
- 使用Release模式编译应用程序
- 自行在Windows下编译一个Debug的DLL,将此DLL放到测试程序.exe的目录中即可(Debug的时候会优先寻找程序当前目录,然后才是系统路径里的目录)
- 应用程序在Release模式下编译则使用Release DLL, Debug模式下编译则使用Debug DLL.
Hailort在Windows下的编译方式:
Release:
cmake -S . -B build -A x64 -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
Debug:
cmake -S . -B build -A x64 -DCMAKE_BUILD_TYPE=Debug
cmake --build build --config Debug
可能-DCMAKE_BUILD_TYPE=Release部分没有意义(未验证),关键在于--config Debug部分。
在Windows环境中编译Hailort + OpenCV Demo的CMakeLists.txt推荐
set(HAILORT_ROOT "C:/Program Files/HailoRT")
set(HAILORT_INCLUDE "${HAILORT_ROOT}/include")
set(HAILORT_LIB "${HAILORT_ROOT}/lib/libhailort.lib")
set(OpenCV_INCLUDE_DIRS "C:/opencv/build/include")
set(OpenCV_LIBS "C:/opencv/build/x64/vc16/lib/opencv_world490d.lib")
include_directories(${HAILORT_INCLUDE})
include_directories(${OpenCV_INCLUDE_DIRS})
find_package(Threads REQUIRED)
find_package(HailoRT REQUIRED)
target_link_libraries(detection_app PRIVATE ${OpenCV_LIBS})
target_link_libraries(detection_app PRIVATE ${HAILORT_LIB})
发表回复