triple-Mu / YOLOv8-TensorRT

YOLOv8 using TensorRT accelerate !
MIT License
1.23k stars 210 forks source link

windows下编译成功后,执行exe文件报错:无法定位程序输入点 cudaMallocAsync 于动态链接库 #217

Open manfrey666 opened 1 month ago

manfrey666 commented 1 month ago

问题

windows编译成功后,执行exe文件报错。报错如下: 无法定位程序输入点 cudaMallocAsync 于动态链接库 Unable to locate program input point "cudaMallocAsync" in dynamic link library

运行环境

Windows 11 Cuda 11.6 TensorRT 8.6.1.6

CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(yolov8 LANGUAGES CXX CUDA)

set(CMAKE_CUDA_ARCHITECTURES 89)
set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")
# set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
set(CMAKE_CUDA_COMPILER ${CUDA_DIR}/bin)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE Release)
option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)

# CUDA
#set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")
#set(CUDA_INCLUDE_DIRS ${CUDA_DIR}/include}
#set(CUDA_LIBRARIES ${CUDA_DIR}/lib/x64)
find_package(CUDA REQUIRED)
message(STATUS "CUDA Libs: \n${CUDA_LIBRARIES}\n")
get_filename_component(CUDA_LIB_DIR ${CUDA_LIBRARIES} DIRECTORY)
message(STATUS "CUDA Headers: \n${CUDA_INCLUDE_DIRS}\n")

# OpenCV
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV Libs: \n${OpenCV_LIBS}\n")
message(STATUS "OpenCV Libraries: \n${OpenCV_LIBRARIES}\n")
message(STATUS "OpenCV Headers: \n${OpenCV_INCLUDE_DIRS}\n")

# TensorRT
set(TENSORRT_DIR "D:/Dev/TensorRT/TensorRT-8.6.1.6.Windows10.x86_64.cuda-11.8/TensorRT-8.6.1.6")
set(TensorRT_INCLUDE_DIRS ${TENSORRT_DIR}/include)
set(TensorRT_LIBRARIES ${TENSORRT_DIR}/lib)

message(STATUS "TensorRT Libs: \n${TensorRT_LIBRARIES}\n")
message(STATUS "TensorRT Headers: \n${TensorRT_INCLUDE_DIRS}\n")

list(APPEND INCLUDE_DIRS
        ${CUDA_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        ${TensorRT_INCLUDE_DIRS}
    include
        )

list(APPEND ALL_LIBS
        ${CUDA_LIBRARIES}
        ${CUDA_LIB_DIR}
        ${OpenCV_LIBRARIES}
        ${TensorRT_LIBRARIES}
        )

include_directories(${INCLUDE_DIRS})

add_executable(${PROJECT_NAME}
        main.cpp
        include/yolov8.hpp
        include/common.hpp
        )

target_link_directories(${PROJECT_NAME} PUBLIC ${ALL_LIBS})
target_link_libraries(${PROJECT_NAME} PRIVATE nvinfer nvinfer_plugin cudart ${OpenCV_LIBS})
triple-Mu commented 1 month ago

问题

windows编译成功后,执行exe文件报错。报错如下: 无法定位程序输入点 cudaMallocAsync 于动态链接库 Unable to locate program input point "cudaMallocAsync" in dynamic link library

运行环境

Windows 11 Cuda 11.6 TensorRT 8.6.1.6

CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(yolov8 LANGUAGES CXX CUDA)

set(CMAKE_CUDA_ARCHITECTURES 89)
set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")
# set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
set(CMAKE_CUDA_COMPILER ${CUDA_DIR}/bin)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE Release)
option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)

# CUDA
#set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")
#set(CUDA_INCLUDE_DIRS ${CUDA_DIR}/include}
#set(CUDA_LIBRARIES ${CUDA_DIR}/lib/x64)
find_package(CUDA REQUIRED)
message(STATUS "CUDA Libs: \n${CUDA_LIBRARIES}\n")
get_filename_component(CUDA_LIB_DIR ${CUDA_LIBRARIES} DIRECTORY)
message(STATUS "CUDA Headers: \n${CUDA_INCLUDE_DIRS}\n")

# OpenCV
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV Libs: \n${OpenCV_LIBS}\n")
message(STATUS "OpenCV Libraries: \n${OpenCV_LIBRARIES}\n")
message(STATUS "OpenCV Headers: \n${OpenCV_INCLUDE_DIRS}\n")

# TensorRT
set(TENSORRT_DIR "D:/Dev/TensorRT/TensorRT-8.6.1.6.Windows10.x86_64.cuda-11.8/TensorRT-8.6.1.6")
set(TensorRT_INCLUDE_DIRS ${TENSORRT_DIR}/include)
set(TensorRT_LIBRARIES ${TENSORRT_DIR}/lib)

message(STATUS "TensorRT Libs: \n${TensorRT_LIBRARIES}\n")
message(STATUS "TensorRT Headers: \n${TensorRT_INCLUDE_DIRS}\n")

list(APPEND INCLUDE_DIRS
        ${CUDA_INCLUDE_DIRS}
        ${OpenCV_INCLUDE_DIRS}
        ${TensorRT_INCLUDE_DIRS}
  include
        )

list(APPEND ALL_LIBS
        ${CUDA_LIBRARIES}
        ${CUDA_LIB_DIR}
        ${OpenCV_LIBRARIES}
        ${TensorRT_LIBRARIES}
        )

include_directories(${INCLUDE_DIRS})

add_executable(${PROJECT_NAME}
        main.cpp
        include/yolov8.hpp
        include/common.hpp
        )

target_link_directories(${PROJECT_NAME} PUBLIC ${ALL_LIBS})
target_link_libraries(${PROJECT_NAME} PRIVATE nvinfer nvinfer_plugin cudart ${OpenCV_LIBS})

尝试把libcudart.lib路径放到ALL_LIBS中呢

manfrey666 commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

triple-Mu commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

manfrey666 commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

cuda版本是11.6,win下应该是cudart.lib,已经在ALL_LIBS中了。

triple-Mu commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

cuda版本是11.6,win下应该是cudart.lib,已经在ALL_LIBS中了。

是把它所在的目录放在ALL_LIBS

manfrey666 commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

cuda版本是11.6,win下应该是cudart.lib,已经在ALL_LIBS中了。

是把它所在的目录放在ALL_LIBS

set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")
list(APPEND ALL_LIBS
    ${CUDA_DIR}/lib/x64
        ${CUDA_LIBRARIES}
        ${CUDA_LIB_DIR}
        ${OpenCV_LIBRARIES}
        ${TensorRT_LIBRARIES}
        )

是的。依然报错

triple-Mu commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

cuda版本是11.6,win下应该是cudart.lib,已经在ALL_LIBS中了。

是把它所在的目录放在ALL_LIBS


set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")

list(APPEND ALL_LIBS

  ${CUDA_DIR}/lib/x64

        ${CUDA_LIBRARIES}

        ${CUDA_LIB_DIR}

        ${OpenCV_LIBRARIES}

        ${TensorRT_LIBRARIES}

        )

是的。依然报错

这个符号就在这个lib里,剩下的只能靠你自己排查了。

manfrey666 commented 1 month ago

尝试把libcudart.lib路径放到ALL_LIBS中呢

似乎没有这个文件

你的cuda版本是多少呀?需要大于11.0才有这个api。 Linux下这个符号在 libcudart.so 里面。 Win我很少用来开发,所以不知是怎样的。

cuda版本是11.6,win下应该是cudart.lib,已经在ALL_LIBS中了。

是把它所在的目录放在ALL_LIBS


set(CUDA_DIR "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6")

list(APPEND ALL_LIBS

    ${CUDA_DIR}/lib/x64

        ${CUDA_LIBRARIES}

        ${CUDA_LIB_DIR}

        ${OpenCV_LIBRARIES}

        ${TensorRT_LIBRARIES}

        )

是的。依然报错

这个符号就在这个lib里,剩下的只能靠你自己排查了。

好的,谢谢