如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题

今天用MinGW的GCC在Windows里编了一个简单的命令行barcode识别程序:

gcc -o demo ReadBarcode.cpp -L . -lDynamsoftBarcodeReader -lstdc++

结果在运行的时候发生错误:

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第1张图片

搜了一下发现这个接口是libstdc++里的。通过Visual Studio命令行运行dumpbin来看下程序依赖的库:

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第2张图片

这里看到有libstdc++-6.dll这个文件。在MinGW目录中找到这个文件,导出函数列表查看:

dumpbin /exports C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\libstdc++-6.dll

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第3张图片

接口太多,存到文本里打开:

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第4张图片

MinGW的libstdc++-6.dll是包含_ZNSt18condition_variable10notify_oneEv的。所以问题可能就出在系统运行程序的时候,加载了另外一个不包含这个接口的DLL。

打开系统变量里的路径,查看相关的应用,这个应用路径肯定在MinGW的上面。最后定位到我安装的QEMU:

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第5张图片

在QEMU的目录中也有一个libstdc++-6.dll文件。同样导出之后比较下,发现里面少了这个接口:

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第6张图片

直接把QEMU里的DLL删除做一个快速验证,发现程序可以正常运行了。

如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题_第7张图片
最后我把MinGW的路径放到了QEMU上面。

你可能感兴趣的:(如何解决MinGW应用_ZNSt18condition_variable10notify_oneEv不存在的问题)