Win10使用mingw64编译opencv_contrib 4.5.2版本报错undefined reference to `__imp_GetACP‘ 解决方案

文章目录

  • 前言
  • 解决方法
  • 后记

前言

被这个问题困扰好久,在stackoverflow等各处也搜遍了关键词,搜出来的大多是很久远的文章,没有合适的解决方案,最后还是去github的opencv_contrib库的issues里发现其他人也遇到过这个问题,并且已经提供了解决方法。

这应该是由于opencv_contrib4.5.2版本(截至今天2021.4.30已发布的最新版本)引入了wechat_qr_code模块(微信扫二维码模块开源了!)导致的问题,同时这个问题似乎只有在使用mingw64而非visual studio编译时才会出现。所以,如果你编译时:

  1. 没有包含opencv_contrib库
  2. 不是4.5.2版本
  3. 不是使用mingw64

那你可以关掉这篇文章,再找找别的解决方案= =
相反,如果你满足了上面的三个条件,那一定会遇到这个问题,也请继续往下看~

解决方法

如果网络条件允许,可以点击这个链接跳转到github的commit页面查看修改哪个文件及修改方式。顺便可以再通过这个链接了解issue的前因后果:)

懒得麻烦的话,这里也搬运一下——

  1. 定位到你的opencv_contrib\modules\wechat_qrcode\src\zxing这一目录下,打开zxing.hpp文件
  2. 将第30行的#if defined(__ANDROID_API__)改为#if defined(__ANDROID_API__) || defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
  3. 删掉第54到第62行的内容:
    
    #if defined(_MSC_VER)
    
    #ifndef NO_ICONV
    #define NO_ICONV
    #endif
    
    #endif
    
    
  4. 保存关闭,在cmake中重新configure和generate,然后再make,可以build成功~

后记

修复这个bug的PR已经已经被merge了,应该在下个版本的release中就会被修复,所以两三个月后应该就不会有人再遇到这个bug了。但希望这篇文章能在那之前,帮助到恰好在这段时间利用cmake和mingw64来build最新版本opencv_contrib的苦苦挣扎的你!

同时也给踩坑的你我提个醒,以后除了可以stackoverflow和csdn之外,还可以去github的讨论区找找解决方案~

你可能感兴趣的:(踩坑?,bug,opencv,mingw,windows,10)