我在这个问题上花了 2 天时间,但仍然不知道该怎么做。
我要做的就是用 C 语言构建一个程序,或者更确切地说是一个函数,它将接收一个压缩的 lzma 文件,然后在 Windows 上解压缩它。我正在使用 CLion 和 Cygwin 64 3.0.1 进行操作。
听起来容易吗?可能,除了我尝试的所有简单方法都不起作用的事实。
让我先解决这个问题,因为我不熟悉 Cmake,所以这就是我寻求建议的原因。
我尝试过的方法:
1)
在github上搜索了很多代码,我只是看到他们做
#include <lzma.h>
很好,只是在 Windows 上不起作用。当我编译时,我得到了错误:
undefined reference to `lzma_stream_decoder'
undefined reference to `lzma_code'
谷歌搜索告诉我,我缺少用于 lzma 开发的库,解决方案只是简单地做一个 sudo apt,然后......你猜对了:不适用于 Windows。
2)
也许是 Cmake 的东西,所以我们先尝试用简单的 gcc 编译。我抓住了一个简单的解压缩代码 #include <lzma.h>
并尝试在 Ubuntu 上编译它。太棒了,一切都很顺利。
回到 Windows,我打开了 Cygwin 终端。哦,当然在 Cygwin 中,我已经下载了 liblzma-devel。
编译运行很好。但是在启动可执行文件时:
cygwin1.dll and cyglzma-5.dll are missing
什么...即使我专门下载了这些文件并将它们与可执行文件放在同一个文件夹中,它仍然无法正确启动。
3)
回到 Clion/Cmake。
我查看了Lzma SDK,但无济于事。我应该向 Cmake 文件写入什么代码?我找不到任何说明如何在 C 中使用它的指南,更不用说使用 Cmake 编译它了。
谷歌搜索“Cmake Lzma”将我带到FindLibLZMA,我不知道他们在写什么。我仍然不知道将哪一行放入我的 CmakeList.txt 文件中,例如add_library
或find_package
...不,什么都没有。
4)
最后,Xz Utils ...据我所知,最广泛的 Lzma 工具,当然不知何故,它也不起作用。
我将文件 FindLibLZMA.cmake(我从 github 拉下来)放入一个名为 Cmake 的文件夹中。然后我加了
find_package(LibLZMA REQUIRED)
include_directories(${LIBLZMA_INCLUDE_DIRS})
进入 CmakeList.txt 文件。然后我将LIBLZMA_INCLUDE_DIR
FindLibLZMA.cmake 文件中的文件设置为包含 Windows 的 Xz Utils 的文件夹...你猜对了,编译错误:
# LIBLZMA_HAS_AUTO_DECODER - True if lzma_auto_decoder() is found (required).
# LIBLZMA_HAS_EASY_ENCODER - True if lzma_easy_encoder() is found (required).
# LIBLZMA_HAS_LZMA_PRESET - True if lzma_lzma_preset() is found (required).
所有这些库或其他东西都是必需的,但它们在哪里?编译器找不到它,所以是的......再次,我被卡住了。
我从昨天开始一直在尝试,但我仍然卡住了。
所以拜托,我现在很累。任何善良的人都会告诉我如何使 Lzma 库在 Windows 上与 Cmake 一起工作...请...请。谢谢!