Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814375
  • 博文数量: 274
  • 博客积分: 2366
  • 博客等级: 大尉
  • 技术积分: 1880
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 09:37
文章分类

全部博文(274)

文章存档

2022年(1)

2020年(10)

2019年(7)

2018年(18)

2017年(26)

2016年(32)

2015年(43)

2014年(30)

2013年(44)

2012年(36)

2011年(17)

2010年(10)

分类: LINUX

2018-03-09 09:27:55

因为fdisk不支持gpt,想要在安卓上重新分区就需要用parted,于是必须静态编译parted。这里用了当前最新的parted3.2。

交叉编译器:linaro gcc-linaro-arm-linux-gnueabihf-4.9-2014.07 
编译环境:Ubuntu16.04 64位

  1. 获取libuuid 
    parted依赖libuuid,首先获取libuuid。 
    文档说从e2fsprogs 获取,但我参考别人的从util-linux-ng-2.18获取。 
    下载编译。
./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc --prefix=`pwd`/install --disable-shared --without-ncurses --disable-fsck
  • 1

这里只用编译uuid就行了,别给自己找麻烦

cd shlibs/uuid make make install
  • 1
  • 2
  • 3

即可得到libuuid.a

2.编译parted

.configure --prefix=`pwd`/install --host=arm-linux --disable-device-mapper --without-readline --disable-shared CFLAGS="-I/temp/util-linux-ng-2.18/build/install/include" LDFLAGS="-L/temp/util-linux-ng-2.18/build/install/lib" CC=arm-linux-gnueabihf-gcc
  • 1

–prefix=pwd/install表示安装在当前的install目录里

注意CFLAGS,LDFLAGS换成你的libuuid安装路径

再make 之前还要打一个补丁,否则编译失败 
 
在libparted/arch目录下,给linux.c打上补丁

cd libparted/arch
patch -p0.txt file:linux.c cd ../..
  • 1
  • 2
  • 3
  • 4
make make install
  • 1
  • 2

这时得到的仍然不是静态编译的文件,最后需要手动编译

cd parted
  • 1

可以看到有o a文件,还需要另外的两个libuuid.a libparted.a

cp /temp/util-linux-ng-2.18/build/install/lib/libuuid.a . cp ./install/lib/libparted.a .
  • 1
  • 2

准备好这些文件就可静态编译了

arm-linux-gnueabihf-gcc -static -o parted *.a *.o
  • 1

编译完成,没有报错,file看一下可以看得是静态链接的 
这里写图片描述 
最后strip,减少尺寸

arm-linux-gnueabihf-strip parted
  • 1

编译好的:




参考:静态编译libparted.a, parted的艰难历程失去的时空(不知道哪里转的,不贴地址了)

阅读(1475) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~