篇幅有点长,先说解决方法,在编译静态库时加上 -qt-libjpeg,编译出 libjpeg 库后,在项目中使用 #pragma comment 链接即可
在我以为升级到 Qt5.15.9 后,运行没有什么问题时,问题就来了
longjmp 函数可能出现错误的原因和解决方法如下:
- 调用 setjmp 的函数已经返回
- 跳转目标不存在
当 longjmp 函数尝试跳转到之前设置的跳转点时,如果该跳转点已经不存在,就会导致错误。这种情况通常发生在跳转点所在的函数已经返回或者被释放时。解决方法是检查跳转点是否存在,并确保跳转点所在的函数仍然有效。
- 跨线程调用
- 其他原因
除了上述几种情况外,还有可能是其他一些原因导致 longjmp 错误。例如,内存泄漏、非法指针访问、堆栈溢出等问题都可能导致 longjmp 函数失败。解决方法是根据具体错误信息进行排查和修复。
我这边是触发 ERREXIT2 后而跳出的错误
原始链接:Possibility of non-unwinding error handling
的 api 没有任何改变,他也可以帮忙包装下这个报错,只是要加钱
那就不得不说 Qt 对 5.15 后续版本做出的一些改动了
就是说 jpeg 要你自己去链接,我们不再帮你集成到 qjpeg.lib 中了,应该是因为协议问题
Independent JPEG Group License and BSD 3-Clause "New" or "Revised" License and zlib License。
既然问题找到了,那解决方法“应该”也能浮出水面了,对,打上双引号的应该
我用 vcpkg 包管理器添加了 libjpeg-turbo:x86-windows-static,程序编译通过,再没有出现 ERROR2019 的错误,但是加载 jpeg 图片还是会报错
QT5.15.9 版本更新中包括将 libjpeg-turbo 更新至 2.1.3
编译出一个 lib 库后,再链接到程序中,还是会报错,嗯,先排除 libjpeg 版本问题
因此我们只要编译一个 libjpeg 的 qt 三方库就行了
使用 Qt Creator(我使用的 Qt Creator 10.0.0) 打开 libjpeg.pro,再在 .pro 文件里改 lib 输出路径就行
重新阅读了官方文档,上面说你可以选择在编译静态库时添加一些参数来一起编译你需要的三方库,比如 libjpeg
是我大意了,附上编译命令,
configure -static -static-runtime -debug-and-release -mp -prefix "..\msvc2019_x86_static" -opensource -confirm-license -optimize-size -qt-libjpeg -make libs -nomake examples -nomake tests -skip qtwebengine
编译出的库文件就在 lib 下
小结:还是对 Qt 的库配置不熟悉,导致花了大量工夫来解决这种问题;好在有了这次经验后,以后再遇到类似问题,就能手到擒来了