OpenCV C++ 在 Macbook M1 芯片中给出架构 arm64 错误

Hie*_*ham 6 c++ macos opencv arm64 apple-m1

我按照本教程在 Macbook M1 中构建了 OpenCV-4.5.2:https: //sayak.dev/install-opencv-m1。它在 Python 中工作正常,但当我在 C++ 中使用时

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>

int main()
{
    cv::Mat img = cv::imread("avatar.jpeg");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在 cv::Mat 中给出错误

Undefined symbols for architecture arm64:
  "cv::Mat::~Mat()", referenced from:
      _main in main.cpp.o
  "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [imgproc] Error 1
make[2]: *** [CMakeFiles/imgproc.dir/all] Error 2
make[1]: *** [CMakeFiles/imgproc.dir/rule] Error 2
make: *** [imgproc] Error 2
Run Code Online (Sandbox Code Playgroud)

几个小时后,我找不到问题所在。有谁能够帮助我?谢谢你!

P/S:作为补充,这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.19)
project(imgproc)

set(CMAKE_CXX_STANDARD 14)

# Set the location of the OpenCV directory
set(OpenCV_DIR "/usr/local/include/opencv4")
# Find OpenCV library
find_package( OpenCV 4 REQUIRED )
# Add header file
include_directories(include ${OpenCV_INCLUDE_DIRS} )


add_executable(imgproc main.cpp)
Run Code Online (Sandbox Code Playgroud)

Hie*_*ham 2

我发现替换这些包括:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
Run Code Online (Sandbox Code Playgroud)

和:

#include <opencv2/opencv.hpp>
Run Code Online (Sandbox Code Playgroud)

然后一切就都成功了!