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

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...