linux lzma c语言接口,编译squashfs和lzma
编译squashfs和lzma
早年写的笔记,压箱底了,翻出来晒晒
目 录
南瓜文件系统(Squashfs)采用gzip或lamz(更高压缩率)来制作只读的映像文件。LZMA 是 7-Zip 程序中 7z 格式 的默认压缩算法。LZMA 能提供给用户极高的压缩比及较快的压缩速度,它非常适合与应用程序集成,拥有不错的压缩比。Squashfs也可以使用LZMA的算法进行更好的压缩。Squashfs是linux2.6.27之后并入内核的,所以FC6是不能够支持Squashfs文件系统的,但是可以利用应用程序解压和制作Squashfs镜像。
openwrt里的squashfs就是用lzma进行压缩的,openwrt的编译文件夹里就有制作squashfs-lzma和解压的工具。
openwrt里的squashfs-lzma
既然openwrt里面有打包的工具,也应该有解压的工具。使用find命令在整个openwrt编译文件夹查找,找到有几个地方有
[root@localhost kamikaze_8.09]# find ./ |grepunsquashfs
./build_dir/armeb/OpenWrt-SDK-ixp4xx-for-Linux-i686/staging_dir/host/bin/unsquashfs-lzma
./build_dir/armeb/OpenWrt-ImageBuilder-ixp4xx-for-Linux-i686/staging_dir/host/bin/unsquashfs-lzma
./build_dir/host/squashfs3.0/squashfs-tools/unsquashfs.c
./build_dir/host/squashfs3.0/squashfs-tools/unsquashfs-lzma
./build_dir/host/squashfs3.0/squashfs-tools/unsquashfs.o
./staging_dir/host/bin/unsquashfs-lzma
利用openwrt源码编译squashfs-lzma
将kamikaze_8.09/tools/lzma下面的文件和文件夹复制到
/home/linuxuser/squashfs/lzma_open/lzma
kamikaze_8.09/tools/lzma里的文件清单
# ls -Rl
.:
total 8
-rw-rw-rw- 1 501 games 1042 Dec 222008 Makefile
drwxrwxrwx 2 501 games 4096 Jun2 03:21 patches
./patches:
total 16
-rw-rw-rw- 1 501 games 11733 Jun 212006 100-lzma_zlib.patch
-rw-rw-rw- 1 501 games406 Dec 3 2007 110-ranlib.patch
将/kamikaze_8.09/dl/lzma432.tar.bz2解压到/home/linuxuser/squashfs/lzma_open/lzma/lzma432
执行下面两条命令
# patch -d lzma432 -p1 <100-lzma_zlib.patch
#patch -d lzma432 -p1 < 110-ranlib.patch
打印信息如下:
# patch -d lzma432 -p1 < 100-lzma_zlib.patch
patching file C/7zip/Compress/LZMA/LZMADecoder.cpp
patching file C/7zip/Compress/LZMA/LZMADecoder.h
patching file C/7zip/Compress/LZMA_Lib/makefile
patching file C/7zip/Compress/LZMA_Lib/ZLib.cpp
# patch -d lzma432 -p1 < 110-ranlib.patch
patching file C/7zip/Compress/LZMA_Lib/makefile
这样补丁就打好了。
进入/squashfs/lzma_open/lzma/lzma432/C/7zip/Compress/LZMA_Lib,执行make命令即可得到squashfs需要的库文件和源码。
做好的文件已经打包为lzma_forsquash_ryab.tar.gz
找到kamikaze_8.09/tools/squashfs,发现只有一个makefile和100-lzma.patch,并没有源代码。
找到kamikaze_8.09/dl/squashfs3.0.tar.gz,解压到
/home/linuxuser/squashfs/squash3_openwrt/squashfs3.0
现在该目录下文件如下
# ls
100-lzma.patchMakefile open_make_sq.txt squashfs3.0 squashfs3.0.tar.gz
执行如下操作
patch -d squashfs3.0 -p1 < 100-lzma.patch
对比打了patch之后的效果。
结果发现只改变了/home/linuxuser/squashfs/squash3_openwrt/squashfs3.0/makefile,红色的为新添加的内容,其他的都没有变化。
lzma的路径需要修改,改后的makefile如下:注意红色部分
INCLUDEDIR = .
#LZMAPATH = ../lzma/SRC/7zip/Compress/LZMA_Lib
LZMAPATH =/home/linuxuser/openwrt/kamikaze_8.09/build_dir/host/lzma-432/lzma/C/7zip/Compress/LZMA_Lib
CFLAGS := -I$(INCLUDEDIR) -D_FILE_OFFSET_BITS=64-D_LARGEFILE_SOURCE -O2
all: mksquashfs unsquashfs mksquashfs-lzmaunsquashfs-lzma
mksquashfs: mksquashfs.o read_fs.o sort.o
$(CC)mksquashfs.o read_fs.o sort.o -lz -o $@
mksquashfs-lzma: mksquashfs.o read_fs.o sort.o
$(CXX)mksquashfs.o read_fs.o sort.o -L$(LZMAPATH) -llzma -o $@
mksquashfs.o: mksquashfs.c squashfs_fs.h mksquashfs.hglobal.h sort.h
read_fs.o: read_fs.c squashfs_fs.h read_fs.h global.h
sort.o: sort.c squashfs_fs.h global.h sort.h
unsquashfs: unsquashfs.o
$(CC)unsquashfs.o -lz -o $@
unsquashfs-lzma: unsquashfs.o
$(CXX)unsquashfs.o -L$(LZMAPATH) -llzma -o $@
unsquashfs.o: unsquashfs.c squashfs_fs.h read_fs.hglobal.h
clean:
执行make就可以得到4个文件:mksquashfs unsquashfs mksquashfs-lzma unsquashfs-lzma。
3.4版本的lzma
下载了lzma457.tar.bz2,sqlzma3.4-457.tar.bz2,squashfs3.4.tar.gz之后,通过参看build.sample进行打补丁,修改sqlzma3.4-457.tar.bz2里的makefile已经可以完全编译mksquashfs 和unsquashfs,但是不能正确解压openwrt的文件。
试验了下载的五个压缩包
7z457.tar.bz2
linux-2.6.27.4.tar.bz2
lzma457.tar.bz2
sqlzma3.4-457.tar.bz2
squashfs3.4.tar.gz
其中sqlzma3.4-457.tar.bz2里有一个build.sample。
先解压sqlzma3.4-457.tar.bz2到/home/linuxuser/squashfs/sqlzma3.4-457,然后将五个压缩包全部复制进去,包括sqlzma3.4-457.tar.bz2。执行build.sample。其中build.sample执行到一半的时候,会出现提示
cp .config linux-2.6.27.4
cd linux-2.6.27.4
make oldconfig
make prepare
make scripts
cd -
initialize kernel sources now, by using the commandsmentioned above
and then press ENTER...
这个时候再开一个窗口,cd到/home/linuxuser/squashfs/sqlzma3.4-457,执行红色部分的命令。但是实际上cp .config linux-2.6.27.4会报错没有.config文件。但是没关系,继续执行,中间会有一大堆的选择问题,不用理会,全部直接回车。执行完之后,再切换到执行build.sample的那个窗口回车。最终在/home/linuxuser/squashfs/sqlzma3.4-457/BUILD生成下面五个文件,
mksquashfs
sqlzma.ko
squashfs.ko
unlzma.ko
unsquashfs
但是还是不能解开oepnwrt的squash文件,决定放弃。
链接一个lib,比如liblzma.a,只需要-llzma就可以,不能-llibunlzma.比如:
unsquashfs-lzma: unsquashfs.o
$(CXX)$(LDFLAGS) unsquashfs.o -llibunlzma -lpthread -o $@
linux lzma c语言接口,编译squashfs和lzma相关推荐
- Linux上C语言程序编译过程详解
点击蓝字 关注我们 因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 来源于网络,侵删 本文将介绍如何将高层的C/C++语言编写的程序转换 ...
- linux上C语言的编译流程
本文将介绍如何从C/C++文本到二进制可执行文件的过程.该过程需要经过预处理->编译->链接三个步骤,文件内容从普通文本->汇编->二进制的变化. 预处理(Preprocess ...
- linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...
- Linux下C语言程序编写及执行和分步骤编译链接C源代码
实验一:Linux下C语言程序编写及执行 //hello.c #include <stdio.h> int main(){int x = 1;int y = 2;int sum = x + ...
- linux系统c 如何使用教程,基于Linux操作系统的C语言编译和调试方法解析
摘 要:文章先介绍了GCC编译器相关内容,包括GCC编译程序和GCC编译选项,随后介绍了GDB调试程序相关内容,包括GDB具体操作和GDB基础命令,最后介绍了C语言编写中的注意事项,希望能给相关人士提 ...
- 嵌入式linux 网络唤醒,C语言实现wake on lan(网络唤醒...-Windows系统下用命令行编译C/C++...-字符串常量引起的思考_169IT.COM...
前一段时间在自学linux系统,想模仿linux命令行的方式在Windows下编译C/C++程序,摸索一段时间后总算把这个解决了! (1)先用记事本编写如下所示的代码,并另存为hello.cpp,假设 ...
- linux c 判断文件打开文件,Linux 用C语言判断文件和文件夹
Linux 用C语言判断文件和文件夹 #include #include #include #include int access(const char *pathname, int mode); i ...
- linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译
GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...
- C语言的“编译时多态”
typeof 在 kernel 中的使用 -- C 语言的"编译时多态" C 语言本身没有多态的概念,函数没有重载的概念.然而随着 C 语言编写的软件逐渐庞大,越来越多地需要引入一 ...
最新文章
- 二叉树(构造与遍历方法)
- STM32F103+UCOS-II 实现临界区不关闭重要中断
- Consul入门02 - 运行Consul代理
- W3C api 抓取
- Lock同步锁--线程同步
- SpringBoot的配置文件-通过@ConfigurationProperties映射数据
- NodeJs Express 4.x 入门
- 使用XFire+Spring构建Web Service(一)——helloWorld篇
- 坚实原则:Liskov替代原则
- 华为云技术开放日(第三季)活动报道
- Python 创建用户界面之 PyQt5 的使用
- ASCIIUNICODE编码演化
- R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
- 10个最常见的 HTML5 面试题及答案
- centos6.5 vncserver安装与配置
- php 时间转换时间戳_如何实现PHP时间戳与日期的转换
- excel导出 服务器运行失败,SolidWorks 插入自制EXCEL明细表 启动服务器应用程序失败:启动excle服务器失败...
- 对话 NuCypher:如何安全地存储、共享和管理链上私人数据
- 20220529 使用python分割pdf文件
- 广域网加速方案--Riverbed
热门文章
- python实现千牛客服自动回复语_千牛会用到的回复语有哪些?千牛自动回复短语大全...
- bandizip修改压缩文件内容_Bandizip: 压缩和解压缩
- 重新安装Windows应用商店
- appstore开发者中文名称修改
- 微信开发常见问题:自动音乐播放,alert 显示网址
- ubuntu下运行.exe程序
- 今晚7:30 | 连界、将门、百度、碧桂园创投四位大佬眼中的AI世界,是继续高深还是回归商业本质?...
- weka分类器怎么设置样本类别_NeurIPS 2020 | 港中文MMLab自步对比学习: 充分挖掘无监督学习样本...
- 图像的 2DPCA 与 2D2DPCA 特征提取
- vivo手机html有吗,vivo手机有哪些系列?区别是什么?