perry_lin 2025-01-19 20:16 采纳率: 50%
浏览 78

CMake报错undefined reference to `cv::imread(std::string const&, int)

CmakeLists.txt如下(经过GPT改过的)

cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

project(yolov8_libtorch_test LANGUAGES CXX CUDA)

# Compiler settings
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# CUDA settings
set(CMAKE_CUDA_COMPILER "/home/perry/miniconda3/envs/yolo/bin/nvcc")
set(CMAKE_CUDA_ARCHITECTURES 75 80 86 90)

# -------------- OpenCV --------------
set(OpenCV_DIR "/home/perry/miniconda3/envs/yolo/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)

if (OpenCV_FOUND)
    message(STATUS "OpenCV library status:")
    message(STATUS "    config: ${OpenCV_DIR}")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

else()
    message(FATAL_ERROR "OpenCV not found. Please set OpenCV_DIR correctly.")
endif()

include_directories(${OpenCV_INCLUDE_DIRS})

# -------------- libtorch --------------
set(Torch_DIR "/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch")
message(STATUS "Torch_DIR: ${Torch_DIR}")
find_package(Torch REQUIRED)

if (Torch_FOUND)
    message(STATUS "LibTorch status:")
    message(STATUS "    libraries: ${TORCH_LIBRARIES}")
    message(STATUS "    include path: ${TORCH_INCLUDE_DIRS}")
else()
    message(FATAL_ERROR "LibTorch not found. Please set Torch_DIR correctly.")
endif()

include_directories(${TORCH_INCLUDE_DIRS})
link_directories(/home/perry/miniconda3/envs/yolo/lib)

# Source files
file(GLOB_RECURSE SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/main.cc")
add_executable(infer ${SRC_FILES})

# Linking libraries
target_link_libraries(infer ${TORCH_LIBRARIES} 
                      ${OpenCV_LIBS}
                      opencv_core
                      opencv_imgcodecs
                      opencv_imgproc
                      opencv_highgui)

set_property(TARGET infer PROPERTY CXX_STANDARD 17)

# Output directory
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
cmake ..
-- The CXX compiler identification is GNU 11.4.0
-- The CUDA compiler identification is NVIDIA 12.4.131 with host compiler GNU 11.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CUDA compiler: /home/perry/miniconda3/envs/yolo/bin/nvcc - skipped
-- Detecting CUDA compile features
-- Detecting CUDA compile features - done
-- Found OpenCV: /home/perry/miniconda3/envs/yolo (found version "4.10.0")
-- OpenCV library status:
--     config: /home/perry/miniconda3/envs/yolo/lib/cmake/opencv4
--     version: 4.10.0
--     libraries: opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio;opencv_alphamat;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_cvv;opencv_datasets;opencv_dnn_objdetect;opencv_dnn_superres;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_hfs;opencv_img_hash;opencv_intensity_transform;opencv_line_descriptor;opencv_mcc;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_quality;opencv_rapid;opencv_reg;opencv_rgbd;opencv_saliency;opencv_shape;opencv_signal;opencv_stereo;opencv_structured_light;opencv_superres;opencv_surface_matching;opencv_text;opencv_tracking;opencv_videostab;opencv_wechat_qrcode;opencv_xfeatures2d;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
--     include path: /home/perry/miniconda3/envs/yolo/include/opencv4
-- Torch_DIR: /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch
-- Found CUDA: /home/perry/miniconda3/envs/yolo (found version "12.4") 
-- Found CUDAToolkit: /home/perry/miniconda3/envs/yolo/include (found version "12.4.131")
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Caffe2: CUDA detected: 12.4
-- Caffe2: CUDA nvcc is: /home/perry/miniconda3/envs/yolo/bin/nvcc
-- Caffe2: CUDA toolkit directory: /home/perry/miniconda3/envs/yolo
-- Caffe2: Header version is: 12.4
-- Found Python: /home/perry/miniconda3/envs/yolo/bin/python3.12 (found version "3.12.8") found components: Interpreter
CMake Warning at /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:140 (message):
  Failed to compute shorthash for libnvrtc.so
Call Stack (most recent call first):
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
  CMakeLists.txt:34 (find_package)


CMake Warning (dev) at /home/perry/miniconda3/envs/yolo/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:441 (message):
  The package name passed to `find_package_handle_standard_args` (nvtx3) does
  not match the name of the calling package (Caffe2).  This can lead to
  problems in calling code that expects `find_package` result variables
  (e.g., `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:174 (find_package_handle_standard_args)
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
  CMakeLists.txt:34 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Could NOT find nvtx3 (missing: nvtx3_dir) 
CMake Warning at /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:180 (message):
  Cannot find NVTX3, find old NVTX instead
Call Stack (most recent call first):
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
  CMakeLists.txt:34 (find_package)


-- USE_CUDNN is set to 0. Compiling without cuDNN support
-- USE_CUSPARSELT is set to 0. Compiling without cuSPARSELt support
-- USE_CUDSS is set to 0. Compiling without cuDSS support
-- USE_CUFILE is set to 0. Compiling without cuFile support
-- Autodetected CUDA architecture(s):  8.9
-- Added CUDA NVCC flags for: -gencode;arch=compute_89,code=sm_89
CMake Warning at /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:22 (message):
  static library kineto_LIBRARY-NOTFOUND not found.
Call Stack (most recent call first):
  /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:120 (append_torchlib_if_found)
  CMakeLists.txt:34 (find_package)


-- Found Torch: /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libtorch.so
-- LibTorch status:
--     libraries: torch;torch_library;/home/perry/miniconda3/envs/yolo/lib/libc10.so;/home/perry/miniconda3/envs/yolo/lib/libnvrtc.so;torch::nvtoolsext;/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libc10_cuda.so
--     include path: /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/include;/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/include/torch/csrc/api/include
-- Configuring done (2.9s)
-- Generating done (0.0s)
-- Build files have been written to: /home/perry/workplace/yolov8/build
make VERBOSE=1
/home/perry/miniconda3/envs/yolo/bin/cmake -S/home/perry/workplace/yolov8 -B/home/perry/workplace/yolov8/build --check-build-system CMakeFiles/Makefile.cmake 0
/home/perry/miniconda3/envs/yolo/bin/cmake -E cmake_progress_start /home/perry/workplace/yolov8/build/CMakeFiles /home/perry/workplace/yolov8/build//CMakeFiles/progress.marks
make  -f CMakeFiles/Makefile2 all
make[1]: 进入目录“/home/perry/workplace/yolov8/build”
make  -f CMakeFiles/infer.dir/build.make CMakeFiles/infer.dir/depend
make[2]: 进入目录“/home/perry/workplace/yolov8/buildcd /home/perry/workplace/yolov8/build && /home/perry/miniconda3/envs/yolo/bin/cmake -E cmake_depends "Unix Makefiles" /home/perry/workplace/yolov8 /home/perry/workplace/yolov8 /home/perry/workplace/yolov8/build /home/perry/workplace/yolov8/build /home/perry/workplace/yolov8/build/CMakeFiles/infer.dir/DependInfo.cmake "--color="
make[2]: 离开目录“/home/perry/workplace/yolov8/build”
make  -f CMakeFiles/infer.dir/build.make CMakeFiles/infer.dir/build
make[2]: 进入目录“/home/perry/workplace/yolov8/build”
[ 50%] Building CXX object CMakeFiles/infer.dir/main.cc.o
/usr/bin/c++ -DUSE_C10D_GLOO -DUSE_C10D_NCCL -DUSE_DISTRIBUTED -DUSE_RPC -DUSE_TENSORPIPE -isystem /home/perry/miniconda3/envs/yolo/include/opencv4 -isystem /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/include -isystem /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/include/torch/csrc/api/include -isystem /home/perry/miniconda3/envs/yolo/include -std=c++17 -D_GLIBCXX_USE_CXX11_ABI=0 -MD -MT CMakeFiles/infer.dir/main.cc.o -MF CMakeFiles/infer.dir/main.cc.o.d -o CMakeFiles/infer.dir/main.cc.o -c /home/perry/workplace/yolov8/main.cc
[100%] Linking CXX executable infer
/home/perry/miniconda3/envs/yolo/bin/cmake -E cmake_link_script CMakeFiles/infer.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/infer.dir/main.cc.o -o infer   -L/home/perry/miniconda3/envs/yolo/lib  -L/lib/intel64  -L/lib/intel64_win  -L/lib/win-x64  -Wl,-rpath,/home/perry/miniconda3/envs/yolo/lib:/lib/intel64:/lib/intel64_win:/lib/win-x64:/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libtorch.so /home/perry/miniconda3/envs/yolo/lib/libc10.so /home/perry/miniconda3/envs/yolo/lib/libnvrtc.so /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libc10_cuda.so /home/perry/miniconda3/envs/yolo/lib/libopencv_gapi.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_stitching.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_alphamat.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_aruco.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_bgsegm.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_bioinspired.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_ccalib.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_cvv.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_dnn_objdetect.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_dnn_superres.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_dpm.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_face.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_freetype.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_fuzzy.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_hdf.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_hfs.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_img_hash.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_intensity_transform.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_line_descriptor.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_mcc.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_quality.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_rapid.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_reg.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_rgbd.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_saliency.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_signal.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_stereo.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_structured_light.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_superres.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_surface_matching.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_tracking.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_videostab.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_wechat_qrcode.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_xfeatures2d.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_xobjdetect.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_xphoto.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_highgui.so.4.10.0 -Wl,--no-as-needed,"/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libtorch_cpu.so" -Wl,--as-needed -Wl,--no-as-needed,"/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libtorch_cuda.so" -Wl,--as-needed /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libc10_cuda.so /home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libc10.so /home/perry/miniconda3/envs/yolo/lib/libcudart.so -Wl,--no-as-needed,"/home/perry/miniconda3/envs/yolo/lib/python3.1/site-packages/torch/lib/libtorch.so" -Wl,--as-needed /home/perry/miniconda3/envs/yolo/lib/libnvToolsExt.so /home/perry/miniconda3/envs/yolo/lib/libopencv_shape.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_datasets.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_plot.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_text.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_ml.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_phase_unwrapping.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_optflow.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_ximgproc.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_video.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_videoio.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_imgcodecs.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_objdetect.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_calib3d.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_dnn.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_features2d.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_flann.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_photo.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_imgproc.so.4.10.0 /home/perry/miniconda3/envs/yolo/lib/libopencv_core.so.4.10.0
/usr/bin/ld: CMakeFiles/infer.dir/main.cc.o: in function `main':
main.cc:(.text+0x659b): '
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/infer.dir/build.make:164:infer] 错误 1
make[2]: 离开目录“/home/perry/workplace/yolov8/build”
make[1]: *** [CMakeFiles/Makefile2:87:CMakeFiles/infer.dir/all] 错误 2
make[1]: 离开目录“/home/perry/workplace/yolov8/build”
make: *** [Makefile:91:all] 错误 2

问了GPT好一会了,没啥用
环境写不下放在评论里

  • 写回答

3条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的CMakeLists.txt和错误信息,出现链接错误可能的原因有以下几点:

    1. OpenCV库未正确链接:请确保您的OpenCV库已经正确安装并且路径正确。您提供的CMakeLists.txt中的OpenCV路径可能不正确,需要根据您的实际安装路径进行修改。另外,请确认您链接的OpenCV库版本与您的代码兼容。
    2. 缺少依赖库:根据错误信息,编译器找不到一些依赖库,例如libnvrtc.so等。请确保这些依赖库已经正确安装并且路径正确添加到编译选项中。
    3. CUDA配置问题:由于您使用了CUDA进行编译,请确保CUDA已经正确安装并且配置正确。检查CUDA编译器、CUDA版本以及CUDA工具包是否可用。

    针对上述问题,您可以尝试以下解决方案:

    1. 检查并修改OpenCV的路径,确保与您的实际安装路径一致。您可以尝试在CMakeLists.txt中找到OpenCV的路径设置部分,修改为正确的路径。
    2. 确保所有依赖库都已经正确安装并且路径正确添加到编译选项中。您可以检查系统环境变量或者修改CMakeLists.txt中的链接选项来添加缺失的库路径。
    3. 检查CUDA的配置,确保CUDA编译器、CUDA版本以及CUDA工具包可用。您可以尝试重新安装CUDA并检查相关配置。

    此外,根据错误信息中的一部分:“Undefined reference to 'cv::imread'”,这可能是因为在链接阶段没有找到OpenCV的imread函数。请确保您正确链接了OpenCV的高层次接口库(high-level interface library),通常包含imread等函数。

    请注意,以上只是一些可能的解决方案和建议,具体问题的解决可能需要您根据实际情况进行排查和调整。希望这些信息能够帮助您解决问题。如果问题仍然存在,请提供更多详细信息以便更好地帮助您解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月19日