1461521844lijin / trt_yolo_video_pipeline

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

libtrt_cpp_lib.so: undefined reference to `CUDA::MixMemory::cpu(unsigned long)' #9

Closed ChenPengf closed 5 months ago

ChenPengf commented 8 months ago

在编译链接过程中,会出现以下问题:

/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::MixMemory::cpu(unsigned long)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::decode_single_mask(float, float, float*, float*, int, int, unsigned char*, int, int, int, CUstream_st*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::MixMemory::gpu(unsigned long)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::MixMemory::MixMemory(int)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::warpAffineBilinearAndNormalizePlaneInvoker(unsigned char*, int, int, int, float*, int, int, float*, unsigned char, CUDA::Norm const&, CUstream_st*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::to_cpu(bool)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::Tensor(CUDA::DataType, std::shared_ptr<CUDA::MixMemory>, int)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::decode_kernel_common_invoker(float*, int, int, int, float, float*, float*, int, CUstream_st*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::to_gpu(bool)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::offset_array(unsigned long, int const*) const'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::nms_kernel_invoker(float*, float, int, CUstream_st*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::~Tensor()'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDATools::check_runtime(cudaError, char const*, int, char const*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Norm::None()'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::decode_detect_yolov8_kernel_invoker(float*, int, int, int, float, float*, float*, int, CUstream_st*)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Norm::mean_std(float const*, float const*, float, CUDA::ChannelType)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `iLogger::__log_func(char const*, int, iLogger::LogLevel, char const*, ...)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Norm::alpha_beta(float, float, CUDA::ChannelType)'
/usr/bin/ld: libtrt_cpp_lib.so: undefined reference to `CUDA::Tensor::resize(int, int const*)'

然后多次尝试后修改CMakeLists.txt的链接顺序解决了: 将target_link_libraries(test_yolo_detect cpp_lib cuda_lib trt_cpp_lib ${CUDA_LIBS} ${TRT_LIBS} ${local_libs} ) 修改为:target_link_libraries(test_yolo_detect cpp_lib trt_cpp_lib cuda_lib ${CUDA_LIBS} ${TRT_LIBS} ${local_libs} ),改变trt_cpp_lib和cuda_lib的位置就可以编译通过,您那边有遇到这个问题吗,望指教(C++新手提问)。

1461521844lijin commented 8 months ago

当一个库被依赖时,被依赖的库应该放在后面链接 这里trtlib代码中依赖了cudalib的代码,因此正确的链接顺序确实trt_cpp_lib应该在cuda_lib前面,你这个写法才是正确的 不过我本地在链接是确实没有出现这个问题,我猜测是cmake版本原因,没有注意到存在这个问题

piaolinzhe commented 6 months ago

我也遇到同样的问题了,照此修改就解决了