问题标签 [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.

0 投票
1 回答
902 浏览

c++ - 使用 Quazip 构建 c++ Qt CLI 工具

所以通常我是一个嵌入式软件开发人员,我第一次需要做这样的事情......所以我根本不是这方面的专家......我已经走了这么远,有很多谷歌搜索和试错方法......

我想做的事

我需要编写一个可以压缩和解压缩文件的 C++ CLI 应用程序。

我的一般情况

我想使用 Qt 和 Quazip,因为 Qt 本身不支持压缩(或支持)。我想在 Windows 64 位系统上使用 Mingw 和 CMake 构建 Windows 64 位系统。

据我所知,最好静态编译 Quazip,这样我就不会依赖其他系统上可能存在的任何其他 quazip DLL...

我认为它是如何工作的

  1. 我需要编译zlib
  2. 然后我需要编译 Quazip (with zlib)
  3. 将编译的库链接到我的项目。

我的研究

我找到了两个很好的 youtube 视频,它们应该对我有所帮助:

这些方法都没有对我有用。我还发现那篇博客文章有点帮助......

http://www.antonioborondo.com/2014/10/22/zipping-and-unzipping-files-with-qt/

这个网站直到昨天才可用,现在它已经消失了:D

我还发现旧的 Stackoverflow 问题对我有所帮助:

如何在 CMake 中连接 QuaZip 库

我所做的详细步骤:

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:

以下是来自 Qt creator 的 QUAZIP 变量: 考兹普

编辑2:

好的。一些新闻。libquazip.a 是别的东西,它不起作用。如果我链接到 quazip.dll 编译工作。但是当我运行应用程序时,它在函数调用 compressDir 处崩溃......

编辑3:

有用。我只需要将 quazip.dll 复制到已编译的可执行文件中...

0 投票
1 回答
1452 浏览

c++ - 使用 CMake 构建 zLib

我正在尝试使用我的项目的其余部分自动构建 Zlib 和 quazip。我想以类似的方式将 googletest 添加到我的项目中。zLib 和 Quazip 应静态链接到我的应用程序。

由于 CI/CD 的原因,我想这样做,如果其他人想要构建项目,他不必担心这些依赖项(尤其是在 windows 下)......

  1. 在配置时使用 CMake ExternalProject_Add 下载它
  2. 将其添加到目标级别

我的结构如下:

这已经够复杂了,但让我告诉你我在哪里做什么......

(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...

0 投票
1 回答
135 浏览

android - QT QuaZip open() 失败 -1000

我正在尝试解压缩 Zip 文件。在 Android 设备上使用最新的 Qt 5.15。

如果我的文件大于 2GB,则会收到错误 -1000。2GB 以下的文件按预期工作。

我试过了

在打开文件之前没有成功。我也尝试使用构造函数

稍后访问 zip 时,我还会收到以下错误:

QuaZip::goToFirstFile():ZIP 未在 mdUnzip 模式下打开

这是有道理的,因为它首先无法打开文件。

感谢任何帮助,因为我已经在这个问题上苦苦挣扎了几天。

0 投票
0 回答
37 浏览

qt - .DAT 文件未在 qt 中使用 Quazip 库提取

我正在尝试使用 Qt 5.14 中的 Quazip 库提取 .DAT 文件。我将这个 quazip 库集成到我的项目中,并尝试使用它来提取文件。.txt 文件被提取,但 .DAT 文件未被提取。.DAT 文件已创建,但不包含任何数据。这是我的源代码

请告诉我我做错了什么或任何其他额外的标志或需要它的东西。

0 投票
0 回答
24 浏览

build - 令人困惑的错误构建程序:未定义对“QuaZipNewInfo ...”的引用

我正在尝试从头开始编译/构建一个程序,但我对这个过程相对缺乏经验,特别是考虑到它在 Linux 上并且我习惯于 mac。环境一直建立到这一点,但这些错误阻止了我的进步,我似乎无法找到解决方案。我正在使用运行 Debian 10 的 mac mini - 它是我工作中的计算机,所以它不是我的。我可以访问与该程序相关的所有文件,但我不熟悉它们。如果有人可以提供帮助,那就太好了,如有必要,我很乐意提供更多细节。

这是我得到的错误:

提前致谢!

0 投票
0 回答
24 浏览

c++ - 通过 CMake 将 QuaZip 编译到自己的项目中以生成共享库

您能否为我提供一些关于QuaZip和的教程/github 示例CMake

我正在做一个项目,我想提供一个具有导出功能的共享库。

我即将使用CMake,我想编译QuaZip到项目中。我看过很多Qt Project (.pro)例子,但没有找到CMake例子。