package - 打包库(Debian)时创建符号链接(symbolic link)?

标签 package shared-libraries debian symlink

我第一次尝试为 Debian 打包一个小型库。为此,我使用了官方的 Debian 政策手册,但两天后我遇到了一个无法解决的问题。

这是我包装的方式:

  • 创建压缩包(此处为 libvl_1.0.orig.tar.gz)
  • 使用dh_make生成debian目录下的debian conf文件
  • 正确修改控制文件、变更日志和版权。
  • 使用 dpkg-buildpackage 命令构建包。

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

    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
    

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

    最佳答案

    man dh_link

    我在 github 上有一个示例要点,它创建了 /bin/hello以及指向它的符号链接(symbolic link) /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
    

    secret 是hello-world-0.1/debian/hello-world.linksline 18 (at the time of this writing) 创建的文件的脚本。看看这个...

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

    关于package - 打包库(Debian)时创建符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533900/

    相关文章:

    mysql - 从文件系统插入 mysql

    perl - 如何调用在另一个包中声明的子例程而不在子例程名称前加上它的包名?

    go - 使用自定义 Go 包

    Laravel stevebauman/location 返回错误数据

    python打包导致导入错误

    bash - 将 tcpdump 输出写入压缩/gziped 文件

    gcc - 运行时错误 : Segmentation fault with libtommath and libtomcrypt

    linux - gdb 无法打开共享对象文件

    c++ - 构建 Arduino 库

    c# - 无法在 ASP.NET 5 dnx 中构建控制台应用程序