Linux下打包deb

我的示例程序用了Qt,这里讲一下利用linuxdeployqt-x86_64.AppImage打包deb:
先处理依赖,因为一个可执行文件依赖很多动态库,动态库又依赖很多动态库,所以只拷贝可执行文件不行,需要把这一系列依赖文件都找到,并且可执行文件和动态库运行时找其他文件的路径编译完一般是绝对路径,需要改为相对路径才能在改变位置后也能用。假设我们的项目叫ABC。

  1. 把下载的linuxdeployqt-x86_64.AppImage复制到/usr/local/bin目录,做个软连接或更名linuxdeployqt,方便使用。
  2. linuxdeployqt会修改可执行文件和依赖的动态库的rpath,以及动态库依赖的其他动态库的rpath,需要用到patchelf这个东西,可以用apt安装。
  3. 建立一个空目录,起名Project,作为工作目录,在工作目录里再建一个目录,起名ABC,这个第二级的目录才是我们linuxdeployqt用的目录,复制可执行文件到这个目录里。
  4. linuxdeployqt exeName -bundle-non-qt-libs -verbose=2
    exeName是可执行文件,linuxdeployqt会根据这个可执行文件,解析所有依赖的库。
    默认是解析依赖的qt库,-bundle-non-qt-libs加上则解析所有依赖库。
    -verbose=2 是为了输出正在解析的内容,不加只在出错时输出及最后输出一点信息。
  5. 如果有不止一个可执行文件,可以在后面添加-executable=其他可执行文件名。例如:
    linuxdeployqt mainexe -bundle-non-qt-libs -executable=subexe1 -executable=subexe2
  6. 使用显式加载的动态库,先不要copy过来,因为依赖分析也会分析这些库,没有必要。等上面依赖分析等处理完了,再copy到相应目录。
  7. linuxdeployqt会根据依赖,复制依赖库、资源等到工作目录的一些特定目录,并且会修改可执行文件和动态库的rpath,把他们的rpath修改为正确的相对路径。
  8. 上面执行完后,再把程序需要的一些文件,复制到工作目录里,上面说的显式加载的动态库,也可以这时候拷贝过来。
  9. 现在这个路径里的可执行文件和so动态库都是相对路径的了,而且库依赖应该是全的。可以把整个第二级目录复制到别的地方或别的机器,应该一样可以运行。

下面就开始打包了。

  1. 上面说了,项目名ABC的目录在Project目录下面,现在就在Project下面建立一个applications目录,在applications里建立一个ABC.desktop,内容如下,主要是安装后在菜单上或桌面上能出现一个图标。
    [Desktop Entry]
    Name=ABC
    Comment=ABC test software.
    GenericName=ABC
    Exec=/usr/share/ABC/ABC
    Icon=/usr/share/ABC/myicon.ico
    Type=Application
    StartupNotify=false
  2. 在Project里,建立usr/share目录,把applications和ABC剪切到share目录里。

    原来:

    Project/
    ├── ABC
    │   ├── ABC
    │   ├── doc
    │   ├── lib
    │   ├── plugins
    │   ├── resources
    │   └── translations
    └── applications
        └── ABC.desktop
    

    移动文件夹后:

    Project/
    └── usr
        └── share
            ├── ABC
            │   ├── ABC
            │   ├── doc
            │   ├── lib
            │   ├── plugins
            │   ├── resources
            │   └── translations
            └── applications
                └── ABC.desktop
    
  3. 在Project里,建立一个DEBIAN目录,里面建立一个control文件,内容如下:

    package: ABC
    Version: 1.0.0
    Section:Application
    Priority: optional
    Architecture: amd64
    Depends:
    Installed-Size:512
    Maintainer: ABC
    Description: ABC-deb

    最后的Project目录:

    Project/
    ├── DEBIAN
    │   └── control
    └── usr
        └── share
            ├── ABC
            │   ├── ABC
            │   ├── doc
            │   ├── lib
            │   ├── plugins
            │   ├── resources
            │   └── translations
            └── applications
                └── ABC.desktop
    
  4. 在Project里,执行

    dpkg -b . /home/user/ABC.deb
  5. 上面如果打包正常,会在/home/user目录里产生一个ABC.deb文件,如果要安装,

    sudo dpkg -i ABC.deb

 至此完成deb打包。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值