Cha*_*rly 4 debian symlink shared-libraries package
我是第一次尝试为Debian打包一个小型图书馆。为此,我使用的是官方的Debian Policy手册,但是由于两天后遇到了无法解决的问题。
这是我包装的方式:
到这里,没有问题。但是因为它是一个库,所以我需要在安装它时创建一些符号链接,这与库的SONAME有关。在这里,我的库称为libvl。因此,例如,我正在构建一个名为libvl.so.1.0的文件,因为它是第一个版本。为了做对,我想我应该创建这样的符号链接:
libvl.so -> libvl.so.1 -> libvl.so.1.0
Run Code Online (Sandbox Code Playgroud)
为此,我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
我想问题就在那里。我将不胜感激对此的任何答复或评论:-)
我在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
Run Code Online (Sandbox Code Playgroud)
秘密是hello-world-0.1/debian/hello-world.links由脚本的第18行(在撰写本文时)创建的文件。看看这个...
https://gist.github.com/RichardBronosky/5358867
| 归档时间: |
|
| 查看次数: |
5053 次 |
| 最近记录: |