打包库(Debian)时创建符号链接?

时间:2012-05-10 12:22:12

标签: package shared-libraries debian symlink

我正在尝试第一次为Debian打包一个小型库。为此,我使用官方的Debian Policy手册,但是两天后我遇到了一个问题而不是我无法修复。

这就是我打包的方式:

  • 创建tarball(此处为libvl_1.0.orig.tar.gz)
  • 使用dh_make在debian目录中生成debian conf文件
  • 正确修改控制文件,更改日志和版权。
  • 使用dpkg-buildpackage命令构建程序包。

到此为止,没有问题。但由于它是一个库,我需要在安装时创建一些符号链接,这与库的SONAME有关。这里我的库名为libvl。因此,例如,我正在构建一个名为libvl.so.1.0的文件,因为它是第一个版本。为了做到对,我想我应该创建这样的符号链接:

libvl.so -> libvl.so.1 -> libvl.so.1.0

为此,我正在尝试使用make运行安装过程时创建这些链接。如果您启动'make install'命令,这将有效。但是当使用dpkg安装时,如果链接被创建则无,我无法理解。我也尝试使用postinst脚本,但没有任何结果。这是在我的makefile下面:

DESTDIR =
LIBDIR = usr/lib

LIB = libvl.so
MAJOR = 1
MINOR = 0

CC = gcc
CC_FLAGS = -Wall -ansi -Isrc/
LD_FLAGS =
LN = ln -s

SRC = very_long.c

OBJ = $(SRC:.c=.o)

all: libvl

libvl: $(OBJ)
    $(CC) -fPIC -c $(SRC)
    $(CC) -shared -a -o $(LIBDIR)/$(LIB).$(MAJOR).$(MINOR) $(OBJ)

install:
    install -d -m 0755 -o root -g root $(DESTDIR)/$(LIBDIR)
    install -m 0755 -o root -g root $(LIBDIR)/$(LIB).$(MAJOR).$(MINOR) $(DESTDIR)/$(LIBDIR)

    $(LN) /usr/lib/$(LIB).$(MAJOR).$(MINOR) /usr/lib/$(LIB).1
    $(LN) /usr/lib/$(LIB).$(MAJOR) /usr/lib/$(LIB)

clean:
    rm $(OBJ) $(LIBDIR)/$(LIB).1.0

我想问题就在那里。我将不胜感激任何答案或评论: - )

2 个答案:

答案 0 :(得分:5)

请参阅man dh_link

我在github上有一个示例要点,它创建了/bin/hello以及/bin/helloworld处的符号链接

您可以在系统上进行演示,如下所示:

# Create the deb package
curl -O https://gist.github.com/RichardBronosky/5358867/raw/deb-packaging-example.sh
bash deb-packaging-example.sh

# Install the deb package
dpkg --install hello-world*.deb

# Check the scripts
ls -la /bin/hello*
/bin/hello
/bin/helloworld

秘密是由line 18 (at the time of this writing)脚本创建的hello-world-0.1/debian/hello-world.links文件。看看......

https://gist.github.com/RichardBronosky/5358867

答案 1 :(得分:3)

$(LN) /usr/lib/$(LIB).$(MAJOR).$(MINOR) /usr/lib/$(LIB).1
$(LN) /usr/lib/$(LIB).$(MAJOR) /usr/lib/$(LIB)

在上面的代码中,您直接将目标链接到/ usr / lib(即构建机器上),但这样它就不会成为程序包的一部分。 相反,您应该在DESTDIR的子目录中进行链接,以便最终将符号链接放在打包的子树中。