按照之前我写的文章教程,可以很简单的编译出静态库(仅供学习交流)

编译出静态库后,替换旧版本的库,见我另一篇文章教程

之所以没有直接上 Qt6.0 以上的版本,是因为 Qt6.0 对比 Qt5 删减了不少东西(我之前已经测试过了),这就导致项目要有比较大的改动,所以暂时没有特别要换的需求

Qt5.15.9 的静态库版本是今年四月份(2023.4.6)官方才放出的,修复了不少 bug,其中包括我之前遇到的一个字体 bug,见下面的文章,

在编译项目时,遇到了两个比较棘手的问题,第一个是库中函数重定义问题,第二个是找不到对应的库

下面说说这两个问题的解决方法,

第一个报错

1>zlibd.lib(crc32.obj) : error LNK2005: _crc32_combine_op already defined in Qt5Cored.lib(crc32.obj)
1>zlibd.lib(crc32.obj) : error LNK2005: _crc32_combine_gen already defined in Qt5Cored.lib(crc32.obj)
1>zlibd.lib(crc32.obj) : error LNK2005: _crc32_combine_gen64 already defined in Qt5Cored.lib(crc32.obj)
1>******************************************** : fatal error LNK1169: one or more multiply defined symbols found

因为这两个库我都要用到,所以就使用 /FORCE:MULTIPLE  强行忽略第二个定义

结果,

zlibd.lib(crc32.obj) : warning LNK4006: _crc32_combine_op already defined in Qt5Cored.lib(crc32.obj); second definition ignored
1>zlibd.lib(crc32.obj) : warning LNK4006: _crc32_combine_gen already defined in Qt5Cored.lib(crc32.obj); second definition ignored
1>zlibd.lib(crc32.obj) : warning LNK4006: _crc32_combine_gen64 already defined in Qt5Cored.lib(crc32.obj); second definition ignored

补充:

之所以出现重定义,是因为 Qt5.15.9 内部用的是 1.2.12 的 zlib 版本,该 zlib 版本存在 bug,见,

该 bug 已在 1.2.13 中修复,我们也可以先手动改下 crc32.c 源文件再重新编译 lib

注意:可能存在即使修改了也仍然报重定义的错误,所以我是将 crc32.c 中这些函数注释了,免得链接到这里,暂时可以解决

第二个报错

qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_std_error referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_CreateCompress referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_CreateDecompress referenced in function "public: bool __thiscall QJpegHandlerPrivate::readJpegHeader(class QIODevice *)" (?readJpegHeader@QJpegHandlerPrivate@@QAE_NPAVQIODevice@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_destroy_compress referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_destroy_decompress referenced in function "public: __thiscall QJpegHandlerPrivate::~QJpegHandlerPrivate(void)" (??1QJpegHandlerPrivate@@QAE@XZ)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_set_defaults referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_set_quality referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_simple_progression referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_start_compress referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_write_scanlines referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_finish_compress referenced in function "bool __cdecl do_write_jpeg_image(struct jpeg_compress_struct &,unsigned char * *,class QImage const &,class QIODevice *,int,class QString const &,bool,bool)" (?do_write_jpeg_image@@YA_NAAUjpeg_compress_struct@@PAPAEABVQImage@@PAVQIODevice@@HABVQString@@_N5@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_write_marker referenced in function "void __cdecl set_text(class QImage const &,struct jpeg_compress_struct *,class QString const &)" (?set_text@@YAXABVQImage@@PAUjpeg_compress_struct@@ABVQString@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_read_header referenced in function "public: bool __thiscall QJpegHandlerPrivate::readJpegHeader(class QIODevice *)" (?readJpegHeader@QJpegHandlerPrivate@@QAE_NPAVQIODevice@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_start_decompress referenced in function "bool __cdecl read_jpeg_image(class QImage *,class QSize,class QRect,class QRect,int,void (__fastcall*)(unsigned int *,unsigned char const *,int),struct jpeg_decompress_struct *,struct my_error_mgr *)" (?read_jpeg_image@@YA_NPAVQImage@@VQSize@@VQRect@@2HP6IXPAIPBEH@ZPAUjpeg_decompress_struct@@PAUmy_error_mgr@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_read_scanlines referenced in function "bool __cdecl read_jpeg_image(class QImage *,class QSize,class QRect,class QRect,int,void (__fastcall*)(unsigned int *,unsigned char const *,int),struct jpeg_decompress_struct *,struct my_error_mgr *)" (?read_jpeg_image@@YA_NPAVQImage@@VQSize@@VQRect@@2HP6IXPAIPBEH@ZPAUjpeg_decompress_struct@@PAUmy_error_mgr@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_finish_decompress referenced in function "bool __cdecl read_jpeg_image(class QImage *,class QSize,class QRect,class QRect,int,void (__fastcall*)(unsigned int *,unsigned char const *,int),struct jpeg_decompress_struct *,struct my_error_mgr *)" (?read_jpeg_image@@YA_NPAVQImage@@VQSize@@VQRect@@2HP6IXPAIPBEH@ZPAUjpeg_decompress_struct@@PAUmy_error_mgr@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_calc_output_dimensions referenced in function "bool __cdecl read_jpeg_size(int &,int &,struct jpeg_decompress_struct *)" (?read_jpeg_size@@YA_NAAH0PAUjpeg_decompress_struct@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_save_markers referenced in function "public: bool __thiscall QJpegHandlerPrivate::readJpegHeader(class QIODevice *)" (?readJpegHeader@QJpegHandlerPrivate@@QAE_NPAVQIODevice@@@Z)
1>qjpegd.lib(qjpeghandler.obj) : error LNK2019: unresolved external symbol _jpeg_resync_to_restart referenced in function "public: __thiscall my_jpeg_source_mgr::my_jpeg_source_mgr(class QIODevice *)" (??0my_jpeg_source_mgr@@QAE@PAVQIODevice@@@Z)

LNK2019 的报错很简单明了,就是链接时没有找到对应函数的符号文件,导致链接失败,然后报错

结合新生成的 lib 文件,我第一感觉就是 Qt5.15.9 将这些函数删减了

lib 文件大小删减了三分之二左右,故项目中原先依赖这块部分的函数都找不到符号文件了

目前我的解决方案是将项目中这块依赖代码删掉(这些代码用于 jpeg 的图片插件),后续测试看看有没有问题,先保证项目能编译成功

这两个错误解决后,项目再次 0 error,并且字体 bug 不出现了


更新:

注释了 QJpegPlugin 后,Qt 将无法加载 jpeg 格式图片,所以不需要注释掉

不注释会报错的解决方法见:Qt 加载 libjpeg 库出现“长跳转已经运行”错误

相关:

Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误的更多相关文章

  1. 〖Linux〗Qt5.2.0+gsoap开发Android的NDK程序遇到错误的解决

    1.  error: cannot convert ‘int*’ to ‘hostent**’ for argument ‘5’ to.. 原因分析: 缺少的宏定义,导致使用了错误的函数原型. 被调用 ...

  2. 记 openSUSE 42.3 升级到Leap 15.0

    先将系统的软件更新到最新版本 sudo zypper update 删除42.3的软件源,若有其他数据源,如nginx的,也需要一并删除,可使用zypper lr -d 来查询 sudo zypper ...

  3. qt5.4.0编译错误

    error1: 进程"C:\Qt\Qt5.4.0\Tools\QtCreator\bin\jom.exe"退出,退出代码 2 solution:去工具->选项->构建和 ...

  4. VS2010编译Qt5.4.0静态库

    http://www.kavenblog.com/?p=375 1.Qt的跨平台十分优秀,但是在Windows上是还是会有许多问题,其中之一就是动态链接库的问题,Qt程序的发布必须带一个体积不小的DL ...

  5. 解决Qt5.7.0 cannot find -lGL

    很久没用Qt了,这次要做一个协议编辑器,在ubuntu 14.04上安装了最新版本的Qt 5.7.0.界面改用扁平化风格,第一感觉还不错.按默认步骤创建了一个gui程序,编译运行,报了一个错:cann ...

  6. Qt5.3.0 for android windows平台下搭建及demo(虫子的博客)

    ----我的生活,我的点点滴滴!! 部门领导突然心血来潮,想在android平台上做应用,但是我们大多产品属于嵌入式(本吊只负责写写应用,苦比的被强行顶过来搞这,由于这还得领导吵了一架,架虽然吵完了, ...

  7. CentOS6.2下安装Qt5.1.0

    因为要将程序实现跨平台,所以只能在CentOS6.2上再安装一次Qt,为了保证一致性,我使用了和windows下版本一样的Qt5.1.0,可以到此处下载. 下载好,复制到虚拟机上后,直接双击运行,一切 ...

  8. 无法解决“Microsoft.SharePoint.Security, Version=15.0.0.0,”与“Microsoft.SharePoint.Security, Version=14.0.0.0”之间的冲突

    VisualStudio 2013创建控制台项目,.NetFramework选为4.5.生成目标平台:x64.然后添加对Microsoft.SharePoint.dll的引用. 生成项目时," ...

  9. VS2010+Qt5.4.0 环境搭建(离线安装)

    原创作者:http://blog.csdn.net/solomon1558/article/details/44084969 前言 因项目需要Qt开发GUI,我根据网上资料及自己的经验整理了搭建vs2 ...

  10. Qt5.7.0配置选项(configure非常详细的参数)

    configure是一个命令行工具,用于配置Qt编译到指定平台.configure必须运行于Qt源码根目录.当运行configure时,编译源码使用的是所选工具链中的make工具. 一.源码目录.编译 ...

随机推荐

  1. [转帖]HikariCP常用监控指标与故障排查实战

    编者有言:本书由资深数据库连接池专家撰写,褚霸.德哥.张亮.吴晟等近10位专家高度评价,从设计思想.功能使用.原理实现.工程实践.技术扩展5个维度对HikariCP进行全面讲解和深入分析. 本文将带你 ...

  2. [转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量

    tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器. tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包.Wireshark 除了可 ...

  3. [转帖]云平台部署CNA、VRM手动安装方法

    云平台部署CNA.VRM手动安装方法 分享人:郭道川 00443725 日期:2018.11.06     Ⅰ. 项目介绍 该项目主要为XX煤矿智能煤炭项目云平台部署交付,该项目所采用的服务器为RH2 ...

  4. [转帖]Redis核心技术与实战

    https://www.cnblogs.com/strick/p/14851429.html 最近在读一篇关于Redis的专栏,叫做<Redis核心技术与实战>,作者在Redis方面研究颇 ...

  5. [转帖]比 Python 快 35000 倍!LLVM&Swift 之父宣布全新编程语言 Mojo:编程被颠覆了

    https://www.infoq.cn/article/GFfVLVpkIGOcKYB85Opb "Mojo 可能是近几十年来最大的编程语言进步." 近日,由 LLVM 和 Sw ...

  6. [转帖]gdb调试常见命令详细总结(附示例操作)

    一.简介 通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值.函数的调用过程.内存中数据.线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数, ...

  7. Redis命令监控与简单分析

    Redis命令监控与简单分析 前言 为了能够快速识别分析redis的命令 自己在环境上面进行了一些简单的跟踪以及脚本 这里不全是进行metrics, 细致到具体的命令分析 脚本部分-1 mkdir - ...

  8. [转帖]kubelet 原理解析四:probeManager

    https://segmentfault.com/a/1190000022163835 概述 在Kubernetes 中,系统和应用程序的健康检查任务是由 kubelet 来完成的,本文主要讨论kub ...

  9. Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索

    Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本.图像等领域,支持文搜.图搜文.图搜图匹配搜索 Similarities 相似度计算.语义匹配搜索工具包,实现 ...

  10. 6.8 Windows驱动开发:内核枚举Registry注册表回调

    在笔者上一篇文章<内核枚举LoadImage映像回调>中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与LoadI ...