【问题标题】:OpenCV C++ give architecture arm64 error in Macbook M1 chipOpenCV C++ 在 Macbook M1 芯片中给出架构 arm64 错误
【发布时间】:2021-09-13 10:39:13
【问题描述】:

我按照本教程在 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;
}

它在 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

几个小时后,我找不到它有什么问题。有谁能够帮我?谢谢!

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)

【问题讨论】:

  • 您是否将链接参数添加到编译器命令?你需要g++ main.cpp $(pkg-config --libs opencv)
  • 这种情况下好像没用,还是出现错误
  • 就我而言,我也使用 M1 Mac。 OpenCV 路径是/opt/homebrew/Cellar/opencv/4.5.2_1/include/opencv4/。因此,我使用了一个命令:g++ $(pkg-config --cflags --libs opencv4) -std=c++11 main.cpp -o main.o。但是,没有使用cv::mat,主函数只有return 0,所以编译成功。顺便说一句,如果主函数包含cv::mat,它会给我同样的编译错误。所以,我得出的结论是,这是因为 M1 Mac 架构还不支持 OpenCV 代码。我还在寻找解决方案。

标签: c++ macos opencv arm64 apple-m1


【解决方案1】:

我发现替换这些包括:

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

与:

#include <opencv2/opencv.hpp>

然后一切正常!

【讨论】:

    【解决方案2】:

    我在macos中测试opencv成功,参考: https://medium.com/@mfkhao2009/set-up-opencv-development-enrioment-875aa69bd403

    use 应该通过以下方式将库链接到目标 imgproc add_executable(imgproc main.cpp) target_link_libraries(imgproc ${OpenCV_LIBS} )

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 2022-10-25
      • 2021-08-11
      • 2021-08-29
      相关资源
      最近更新 更多