bsdiff/bapatch的编译

在Ubuntu14.04 64位系统上编译bsdiff的步骤如下:

  • 安装libbz2库
sudo apt-get install libbz2-dev
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

猜你喜欢

转载自blog.csdn.net/sunao2002002/article/details/56855251