红联Linux门户
Linux帮助

Ubuntu14.04 64位系统上bsdiff/bspatch的编译

发布时间:2017-02-26 10:04:12来源:linux网站作者:孙大胃
在Ubuntu14.04 64位系统上编译bsdiff的步骤如下:
 
1.安装libbz2库
sudo apt-get install libbz2-dev
 
2.从bsdiff官网(http://www.daemonology.net/bsdiff/)下载代码包。
Ubuntu14.04 64位系统上bsdiff/bspatch的编译
 
3.解压缩、编译
tar -zxvf bsdiff-4.3.tar.gz
cd bsdiff-4.3
make
很不幸,编译不通过。
 
问题1:Makefile格式错误
~/code/bsdiff-4.3 make
Makefile:13: *** 遗漏分隔符 。 停止。
在第13行、第15行加上一个tab键即可。
 
问题2 符号未定义
~/code/bsdiff-4.3 make
cc -O3 -lbz2    bsdiff.c   -o bsdiff
/tmp/ccnh97eO.o:在函数‘main’中:
bsdiff.c:(.text.startup+0x2aa):对‘BZ2_bzWriteOpen’未定义的引用
bsdiff.c:(.text.startup+0x9e9):对‘BZ2_bzWrite’未定义的引用
bsdiff.c:(.text.startup+0xb2c):对‘BZ2_bzWrite’未定义的引用
bsdiff.c:(.text.startup+0xc7b):对‘BZ2_bzWrite’未定义的引用
bsdiff.c:(.text.startup+0xccf):对‘BZ2_bzWriteClose’未定义的引用
bsdiff.c:(.text.startup+0xd22):对‘BZ2_bzWriteOpen’未定义的引用
bsdiff.c:(.text.startup+0xd4d):对‘BZ2_bzWrite’未定义的引用
bsdiff.c:(.text.startup+0xd73):对‘BZ2_bzWriteClose’未定义的引用
bsdiff.c:(.text.startup+0xdc6):对‘BZ2_bzWriteOpen’未定义的引用
bsdiff.c:(.text.startup+0xdf1):对‘BZ2_bzWrite’未定义的引用
bsdiff.c:(.text.startup+0xe17):对‘BZ2_bzWriteClose’未定义的引用
collect2: error: ld returned 1 exit status
make: *** [bsdiff] 错误 1
这个错误比较奇怪,明明libbz2已经安装了。
直接使用命令却编译正常通过,看起来好像编译命令出错了。
~/code/bsdiff-4.3 cc bsdiff.c -O3 -lbz2 -o bsdiff
~/code/bsdiff-4.3 file bsdiff
bsdiff: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=9f884237750343765972d648da742cad8196c861, not stripped
~/code/bsdiff-4.3 
据此修改Makefile为:
CFLAGS      +=  -O3 -lbz2
CC = gcc
PREFIX      ?=  /usr/local
INSTALL_PROGRAM ?=  ${INSTALL} -c -s -m 555
INSTALL_MAN ?=  ${INSTALL} -c -m 444
all:        bsdiff bspatch
bsdiff:     bsdiff.c
$(CC) bsdiff.c $(CFLAGS) -o bsdiff
bspatch:    bspatch.c
$(CC) bspatch.c $(CFLAGS) -o bspatch
install:
${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN
${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endif
再次make,即可能编译通过。
~/code/bsdiff-4.3 make
gcc bsdiff.c -O3 -lbz2 -o bsdiff
gcc bspatch.c -O3 -lbz2 -o bspatch
~/code/bsdiff-4.3
另外,其实在Ubuntu上可以直接通过apt安装bsdiff/bspatch,就不用这么折腾了:
sudo apt-get install bsdiff
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28713.html