编译ARM64EC-Windows Opencv4.10并开启NEON

OpenCV是一个非常强大的计算机视觉库,提供了许多高级的图像和视频处理功能。

vcpkg install opencv4:ARM64-windows 可以轻松编译出来

这个算是一个比较详细的英文的说明

Build OpenCV Applications with MSVC | Arm Learning Paths

还有日文版本

OpenCV v4系をARM64向けにVisual Studioでビルドして、知識0だがビルド成功して動作はした、という手順を紹介します - 新しもの好きプログラマの耳より情報ブログ

这个可能是mini版本的nihui/opencv-mobile: The minimal opencv for Android, iOS, ARM Linux, Windows, Linux, MacOS, HarmonyOS, WebAssembly, watchOS, tvOS, visionOS

opencv的模块众多,注意到可以灵活裁剪。

第一个碰到的小问题

在x64的HOST无法编译成功ARM64EC因为protoc

install-arm64ec-windows-static-rel-out.log

[198/541] C:\WINDOWS\system32\cmd.exe /C "cd /D C:\Users\shijunz\source\repos\wps\VCPKGInstallFromManifestFile\vcpkg-wps_25.01.05\buildtree\opencv4\arm64ec-windows-static-rel\modules\dnn && C:\Users\shijunz\source\repos\wps\VCPKGInstallFromManifestFile\vcpkg-wps_25.01.05\install\arm64ec-windows-static\tools\protobuf\protoc.exe --cpp_out :C:/Users/shijunz/source/repos/wps/VCPKGInstallFromManifestFile/vcpkg-wps_25.01.05/buildtree/opencv4/arm64ec-windows-static-rel/modules/dnn -I C:/Users/shijunz/source/repos/wps/VCPKGInstallFromManifestFile/vcpkg-wps_25.01.05/buildtree/opencv4/src/4.10.0-e5bca385b2/modules/dnn/src/caffe -I C:/Users/shijunz/source/repos/wps/VCPKGInstallFromManifestFile/vcpkg-wps_25.01.05/buildtree/opencv4/src/4.10.0-e5bca385b2/modules/dnn/src/onnx -I C:/Users/shijunz/source/repos/wps/VCPKGInstallFromManifestFile/vcpkg-wps_25.01.05/buildtree/opencv4/src/4.10.0-e5bca385b2/modules/dnn/src/tensorflow C:/Users/shijunz/source/repos/wps/VCPKGInstallFromManifestFile/vcpkg-wps_25.01.05/buildtree/opencv4/src/4.10.0-e5bca385b2/modules/dnn/src/caffe/opencv-caffe.proto"

FAILED: modules/dnn/opencv-caffe.pb.h modules/dnn/opencv-caffe.pb.cc

这个错误表明在编译 OpenCV 的过程中,使用 protoc 工具生成 Protobuf 文件时失败了。原因就是确保 protoc.exe 工具的是为 arm64ec 架构编译的。工具版本不兼容,不能在X64的HOST执行,从而导致生成失败。

或者可以尝试在protobuf的json中 改回来:"host": true

  "dependencies": [

    "abseil",

    {

      "name": "protobuf",

      "host": true -->修改成false

    },

protoc 的作用是将 Protobuf 的消息定义文件(.proto 文件)转换为可以在 C++ 代码中使用的头文件和源文件。这些生成的文件包含了处理 Protobuf 消息所需的所有代码

第二个问题是

链接器无法找到 _tzcnt_u32 符号。

   Creating library lib\opencv_imgproc4.lib and object lib\opencv_imgproc4.exp

hough.cpp.obj : error LNK2001: unresolved external symbol _tzcnt_u32 (EC Symbol)

canny.cpp.obj : error LNK2001: unresolved external symbol _tzcnt_u32 (EC Symbol)

core: hal: disable _tzcnt_u32 for ARM64EC · opencv/opencv@e906f0f

modules/core/include/opencv2/core/hal/intrin.hpp

+1-1

Diff line change

@@ -64,7 +64,7 @@

64

64

namespace {

65

65

inline unsigned int trailingZeros32(unsigned int value) {

66

66

#if defined(_MSC_VER)

67

-

#if (_MSC_VER < 1700) || defined(_M_ARM) || defined(_M_ARM64)

67

+

#if (_MSC_VER < 1700) || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC)

68

68

unsigned long index = 0;

69

69

_BitScanForward(&index, value);

70

70

return (unsigned int)index;

第三个问题是

这个log看到了

.\buildtrees\opencv4\config-arm64ec-windows-release-out.log

-- Dispatch optimization FP16 is not available, skipped

-- print baseline optimization flags:  /arch:SSE /arch:SSE2 

-- fix Compiler doesn't support baseline optimization flags: /arch:SSE /arch:SSE2 for arm64ec, clear  

-- Performing Test HAVE_CPU_BASELINE_FLAGS

临时的workaround就粗鲁的注释跳过。

[opencv4] Build error on arm64ec-windows-static , because Compiler doesn't support baseline optimization flags: /arch:SSE /arch:SSE2 · Issue #43181 · microsoft/vcpkg

 macro(ocv_compiler_optimization_options)

+  message(STATUS "print baseline optimization flags: ${CPU_BASELINE_FLAGS} ")

+  set(CPU_BASELINE_FLAGS "")

+  message(STATUS "fix Compiler doesn't support baseline optimization flags: /arch:SSE /arch:SSE2 for arm64ec, clear ${CPU_BASELINE_FLAGS} ")

   set(__flags "${OPENCV_EXTRA_CXX_FLAGS} ${CPU_BASELINE_FLAGS}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值