1461521844lijin / trt_yolo_video_pipeline

TensorRT+YOLO系列的 多路 多卡 多实例 并行视频分析处理案例
MIT License
222 stars 43 forks source link

编译可执行文件失败 #1

Closed helios123456-lab closed 1 year ago

helios123456-lab commented 1 year ago

根据readme, 在本地重新生成tensorrt engine后,编译可执行文件失败,提示: /usr/bin/ld: libtrt_yolov8_cuda_lib.a(trt_yolov8_cuda_lib_generated_infer.cu.o): in function nvinfer1::(anonymous namespace)::createInferRuntime(nvinfer1::ILogger&)': /home/TensorRT-8.6.1.6/include/NvInferRuntime.h:3756: undefined reference tocreateInferRuntime_INTERNAL' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avformat_new_stream' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavformat_close_input' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to av_write_trailer' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavformat_open_input' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_parameters_copy' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_packet_free' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_parameters_alloc' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_rescale_q_rnd' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_find_encoder' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavformat_find_stream_info' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to av_frame_get_buffer' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_packet_alloc' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_find_decoder' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavcodec_alloc_context3' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to av_opt_set_int' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_frame_free' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_parameters_from_context' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_image_get_buffer_size' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to av_dump_format' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavcodec_free_context' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avformat_write_header' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavformat_alloc_context' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to avcodec_parameters_free' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toav_seek_frame' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference to av_opt_set' /usr/bin/ld: libtrt_yolov8_cpp_lib.so: undefined reference toavcodec_open2' 。。。。 ffmpeg,opencv4,tensorrt环境编译都是OK的,楼主能给个详细的运行测试步骤么?

1461521844lijin commented 1 year ago

这些都是链接时的动态库找不到的报错,确认你动态库的路径跟cmakelist中配置连接的路径是否一致,不一致需要你自己手动修改你本机对应三方库的路径

btw,让我给一个运行测试步骤却连star都没点,说不过去吧

helios123456-lab commented 1 year ago

cmakelist中配置连接都是改成我本地的路径了。 cmake_minimum_required(VERSION 3.15) project(trt_yolov8)

set(CMAKE_CXX_STANDARD 14)

使用cuda

option(USE_CUDA_HW_OPTION "使用硬件编解码能力" OFF)

if(USE_CUDA_HW_OPTION)

     add_definitions(-DUSE_CUDA_HW)

     message(STATUS "硬件编解码能力开启, 请确保硬件环境支持")

endif()

set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.8) set(TENSORRT_ROOT_DIR /home/TensorRT-8.6.1.6)

find_package(CUDA REQUIRED) find_package(OpenCV REQUIRED) find_package(Threads REQUIRED)

include_directories(/usr/local/include) include_directories(/usr/include/opencv4) include_directories(${CUDA_TOOLKIT_ROOT_DIR}/include) include_directories(${TENSORRT_ROOT_DIR}/include) include_directories(src) include_directories(src/base) include_directories(src/ffmpeg)

link_directories(${CUDA_TOOLKIT_ROOT_DIR}/lib64) link_directories(${TENSORRT_ROOT_DIR}/lib)

ffmpeg动态库

file(GLOB_RECURSE FFmpeg_LIBS      /usr/lib/x86_64-linux-gnulibav.so     /usr/lib/x86_64-linux-gnulibsw.so     /usr/lib/x86_64-linux-gnulibpostproc.so)

set(     local_libs     pthread     ${FFmpeg_LIBS}     ${OpenCV_LIBS}     nvinfer nvinfer_plugin nvonnxparser cuda cublas cudart cudnn )

file(GLOB_RECURSE TRT_YOLOV8_SERVER_CPP_SRC src/.cpp) file(GLOB_RECURSE TRT_YOLOV8_SERVER_CU_SRC src/.cu)

cuda_add_library(trt_yolov8_cuda_lib ${TRT_YOLOV8_SERVER_CU_SRC}) add_library(trt_yolov8_cpp_lib SHARED ${TRT_YOLOV8_SERVER_CPP_SRC})

add_executable(trt_yolov8_server test/main.cpp)

target_link_libraries(trt_yolov8_server ${local_libs} trt_yolov8_cuda_lib trt_yolov8_cpp_lib)

add_executable(test_yolov8 test/app.cpp ) target_link_libraries(test_yolov8 ${local_libs} trt_yolov8_cuda_lib trt_yolov8_cpp_lib)

不好意思,star补上了。 谢谢你的答复。

------------------ 原始邮件 ------------------ 发件人: "1461521844lijin/trt_yolov8_infer_example" @.>; 发送时间: 2023年6月21日(星期三) 晚上6:55 @.>; @.**@.>; 主题: Re: [1461521844lijin/trt_yolov8_infer_example] 编译可执行文件失败 (Issue #1)

这些都是链接时的动态库找不到的报错,确认你动态库的路径跟cmakelist中配置连接的路径是否一致,不一致需要你自己手动修改你本机对应三方库的路径

btw,让我给一个运行测试步骤却连star都没点,说不过去吧

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

1461521844lijin commented 1 year ago

你的问题中有一个是链不到tensorrt的函数实现,其他都是链不到ffmpeg的函数实现 ffmpeg链接中有x86_64-linux-gnulib这种前缀??? 是不是少了个 “/ ” x86_64-linux-gnu/lib 再检查一下吧