问题标签 [quazip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 Quazip 构建 c++ Qt CLI 工具
所以通常我是一个嵌入式软件开发人员,我第一次需要做这样的事情......所以我根本不是这方面的专家......我已经走了这么远,有很多谷歌搜索和试错方法......
我想做的事
我需要编写一个可以压缩和解压缩文件的 C++ CLI 应用程序。
我的一般情况
我想使用 Qt 和 Quazip,因为 Qt 本身不支持压缩(或支持)。我想在 Windows 64 位系统上使用 Mingw 和 CMake 构建 Windows 64 位系统。
据我所知,最好静态编译 Quazip,这样我就不会依赖其他系统上可能存在的任何其他 quazip DLL...
我认为它是如何工作的
- 我需要编译zlib
- 然后我需要编译 Quazip (with zlib)
- 将编译的库链接到我的项目。
我的研究
我找到了两个很好的 youtube 视频,它们应该对我有所帮助:
这些方法都没有对我有用。我还发现那篇博客文章有点帮助......
http://www.antonioborondo.com/2014/10/22/zipping-and-unzipping-files-with-qt/
这个网站直到昨天才可用,现在它已经消失了:D
我还发现旧的 Stackoverflow 问题对我有所帮助:
我所做的详细步骤:
1.构建zlib
从官网下载了最新版本的zlib。版本 1.2.11 我使用以下命令构建 zlib:
效果很好,我得到了
- libz.a
- libz.dll.a
- zlib1.dll
我将这些文件和所有头文件(11 个文件)复制到一个单独的文件夹中。看起来像这样:
包含文件夹中的标头 lib 文件夹中的库。
2.构建Quazip
现在混乱的部分......
从GitHub下载最新版本的 Quazip(0.8.1 版)。
我尝试了各种方法来编译 Quazip。我坚持的是:在 quazip 文件夹(源文件所在的文件夹)内的 Qt creator 中打开 .pro 文件。
然后我将编译好的zlib添加到Qmake文件中。以下是我在文件末尾添加的行:
然后使用 QtCreator 构建 Quazip 作为发布版本。编译后我得到
- 压缩包
- libquazip.a
我从包含文件夹中的 quazip (16 fils) 和 lib 文件夹中的两个库中复制所有头文件。
现在我在构建文件夹中有一个压缩包。
3. 将 Quazip 和 zlib 添加到我的项目中
将 FindQuazip.cmake 文件从 Quazip Repo 复制到我的项目中。在我的 CMakeLists.txt 中,我添加了以下几行:
我需要设置 ZLIB_ROOT 以便 CMake 使用我想要的 zlib。如果我没有设置 Root,他会使用我 PC 上安装的 ruby 中的 zlib。我还添加了
最后
然后我需要添加 FindQuazip.cmake,因为它会找到库:我编辑了以下内容:
好的,我花了两天时间才到达我现在所在的位置。现在,当我运行 CMake 时,一切正常。他找到了库。我什至可以包含 Quazip 的头文件。但是当我尝试编译一个最小的例子时,链接器找不到任何符号。最小的例子:
通过编译它,我得到以下错误:
C:\some\path\sources\main.cpp:-1: Fehler: undefined reference to `JlCompress::compressDir(QString, QString, bool)'
这意味着链接器无法链接函数......
我的问题
我究竟做错了什么?我需要以其他方式编译 Quazip 吗?
编辑4:
因为它现在可以工作了,如何将 Quazip 编译为静态库,以便我可以将它静态链接到我的应用程序?
提前致谢...
编辑1:
编辑2:
好的。一些新闻。libquazip.a 是别的东西,它不起作用。如果我链接到 quazip.dll 编译工作。但是当我运行应用程序时,它在函数调用 compressDir 处崩溃......
编辑3:
有用。我只需要将 quazip.dll 复制到已编译的可执行文件中...
c++ - 使用 CMake 构建 zLib
我正在尝试使用我的项目的其余部分自动构建 Zlib 和 quazip。我想以类似的方式将 googletest 添加到我的项目中。zLib 和 Quazip 应静态链接到我的应用程序。
由于 CI/CD 的原因,我想这样做,如果其他人想要构建项目,他不必担心这些依赖项(尤其是在 windows 下)......
- 在配置时使用 CMake ExternalProject_Add 下载它
- 将其添加到目标级别
我的结构如下:
这已经够复杂了,但让我告诉你我在哪里做什么......
(1) CMakeLists.txt
特别注意只是像APP一样将所有包添加在一起
(2) CMakeLists.txt
(3) CMakeLists.txt
这两个 CMakeLists.txt.in 具有几乎相同的内容...
然后是quazip文件夹中的最后一个CMakeListsBuild.txt.in。我只是在编辑原始文件并直接输入 zlib 依赖项。它看起来像这样:
问题
下载和构建 zlib 的静态库可以工作,但是在 linux 下编译时出现以下错误。
这是我不明白的奇怪部分。如果我查看 zlib 的 CMakeLists。(链接) 他们将源和二进制文件夹的所有内容添加到包含以下内容:
所以我不明白为什么不能构建 zlib 的示例(以及需要 zlib.h 的所有其他内容)......也许有人有提示......谢谢......
编辑
如果我安装带有 apt 构建作品的标题...但是为什么;)因为没有地方调用 find_package...
android - QT QuaZip open() 失败 -1000
我正在尝试解压缩 Zip 文件。在 Android 设备上使用最新的 Qt 5.15。
如果我的文件大于 2GB,则会收到错误 -1000。2GB 以下的文件按预期工作。
我试过了
在打开文件之前没有成功。我也尝试使用构造函数
稍后访问 zip 时,我还会收到以下错误:
QuaZip::goToFirstFile():ZIP 未在 mdUnzip 模式下打开
这是有道理的,因为它首先无法打开文件。
感谢任何帮助,因为我已经在这个问题上苦苦挣扎了几天。
qt - .DAT 文件未在 qt 中使用 Quazip 库提取
我正在尝试使用 Qt 5.14 中的 Quazip 库提取 .DAT 文件。我将这个 quazip 库集成到我的项目中,并尝试使用它来提取文件。.txt 文件被提取,但 .DAT 文件未被提取。.DAT 文件已创建,但不包含任何数据。这是我的源代码
请告诉我我做错了什么或任何其他额外的标志或需要它的东西。
build - 令人困惑的错误构建程序:未定义对“QuaZipNewInfo ...”的引用
我正在尝试从头开始编译/构建一个程序,但我对这个过程相对缺乏经验,特别是考虑到它在 Linux 上并且我习惯于 mac。环境一直建立到这一点,但这些错误阻止了我的进步,我似乎无法找到解决方案。我正在使用运行 Debian 10 的 mac mini - 它是我工作中的计算机,所以它不是我的。我可以访问与该程序相关的所有文件,但我不熟悉它们。如果有人可以提供帮助,那就太好了,如有必要,我很乐意提供更多细节。
这是我得到的错误:
提前致谢!
c++ - 通过 CMake 将 QuaZip 编译到自己的项目中以生成共享库
您能否为我提供一些关于QuaZip
和的教程/github 示例CMake
?
我正在做一个项目,我想提供一个具有导出功能的共享库。
我即将使用CMake
,我想编译QuaZip
到项目中。我看过很多Qt Project (.pro)
例子,但没有找到CMake
例子。