以为是 unable to start correctly (0xc0000142) 实际上却是 gfluidimgproc_func.simd.hpp文件找不到的解决方法(含opencv编译使用)

起因

注意,下面的内容都是win10情况下发生的

在某些时候,我们从比较新的电脑上用vs,编译使用了比较新的opencv4.X库的运行程序,并且打算放到比较旧的电脑上使用时

会发现在动态链接库都是完整的情况下,运行程序会
出现The application was unable to start correctly (0xc0000142)

(那这其实有可能是一个运行包含有opencv4.X程序时会导致的错误)

真的令人非常崩溃,很难找出原因。

于是我在旧电脑上也安装了一个vs进行重新编译
终于发现了问题,编译完成后,
会跳出gfluidimgproc_func.simd.hpp找不到
看上去很像opencv中的imgproc

那这个是什么原因导致的呢?

解释

后来在stackoverflow中找到了下面的回答

The problem most likely is that your CPU doesn’t support some CPU features (like AVX) that OpenCV uses.

通往知识的链接
简单来说就是你的cpu太垃圾了,不支持一些高级点的操作,
如果是导师的设备,就赶紧暗示老师换装配吧

玩笑玩笑,下面是解决方法。

解决方法

(下面都是大致翻译的,英语好的还是自己去看大神们的解答吧)
因为opencv4.X包含有一些比较高级的操作,cpu不支持
那我们就要把这些高级操作给禁掉。

这就要求我们要重新编译代码库,啊啊啊,win懒鬼们的灾难呀

  1. 下载opencv4.X源码
  2. 下载下来后有两个目录一个build(预编译好的,含有我们不需要的高级操作),source源码目录,用它进行编译比起从github上clone下来编译要友善一点
  3. 在源码source目录下,新建一个build目录
  4. 在这个build目录中打开命令行,输入
cmake -D ENABLE_AVX=OFF -D ENABLE_AVX2=OFF -D BUILD_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -G "Visual Studio 15 2017" ..

如果是使用vs2019的同学,就把"Visual Studio 15 2017" 改成"Visual Studio 16 2019" ,另外最后面有两个小点,不要忘记了,这是为了找到build上一个目录中的cmake文件所必须的,

  1. 打开产生的(OpenCV.sln)
  2. 右键 ALL_BUILD 项目 ,点击生成
  3. 回答中说会报一个错误,我确实有个错误说找不到python的一个lib库,并没有发生下面的情况,也不影响后面的操作。

One project will fail. If you look the error, it says something like ‘CV_CPU_HAS_SUPPORT_AVX512_SKX’: undeclared identifier Simply replace the keyword CV_CPU_HAS_SUPPORT_AVX512_SKX with false in the code (it appears 3 times in the whole solution, replace all 3) and hit build on ALL_BUILD again

7.然后生成 INSTALL项目,就可以在build目录下找到一个install文件,里面就是编译好的库,只是你会发现库都是分散的,如下图,而不是一整个像下载下来那样预先编译好的opencv4XXd.lib
在这里插入图片描述
在这里插入图片描述

那就需要什么库,再添加了,都和头文件的名称是对应的,
生成的动态链接库也是一样是分散的
其他也没有影响。

结果

把静态库替换好后,并且添加好对应的动态链接库后,程序就可以正常运行了,真是吓的人一身冷汗,差点以为永远做不出来了,特此留个记录,希望和我遇到相同问题的同学,不要和我一样被吓出一身冷汗,而是冷静的编译。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值