香橙派3B学习笔记10:snap打包C/C++程序与动态链接库(.so)

esnap打包C/C++程序与动态链接库(.so)

之前已经学会了snap基本的打包程序,现在试试打包C/C++程序与动态链接库(.so)

ssh  : orangepi@本地ip
密码 : orangepi

操作系统发行版: 基于 Ubuntu 20.04.6 LTS(Focal Fossa)的定制版本,专门为 Orange Pi 设备优化。PRETTY_NAME="Orange Pi 1.0.6 Focal"

目录

进入项目主目录:

整备项目结构:

添加对应文件的读写权限:

gcc编译主函数文件:

编写snap.yaml:

yaml文件解释: 

snap打包:

测试snap文件:

打包后完整命令交互过程列出:

重构snap:

删除snap:


进入项目主目录:

cd /home/orangepi/snap_packet_test/gccso/

整备项目结构:

.../gccso/

--------lib/

----------------libtest.so

--------meta/

 |----------------snap.yaml

--------src/

 |----------------testso.c

--------test.h

添加对应文件的读写权限:

这一步注意要先cd到对应文件目录再说:

chmod +rwx libtest.so
chmod +rwx testso.c

gcc编译主函数文件:

gcc testso.c -L. -ltest -o testso 

得到可执行程序,把它复制到项目大目录下

编写snap.yaml:

cd /home/orangepi/snap_packet_test/gccso/meta/ 

name: testso
version: '0.12'
summary: My test Snap
description: A test Snap that needs libtest.so
base: core22

grade: stable
confinement: strict

parts:
  testso:
    plugin: make
    source: ../src
    build-packages:
      - build-essential
    stage-packages:
      - libtest
      
  mylib:
    plugin: nil
    source: ../lib
    stage: [libtest.so]
    prime: [libtest.so]
    
apps:
  testso:
    command: testso
    environment:
      LD_LIBRARY_PATH: $SNAP/usr/lib:$SNAP/lib

yaml文件解释: 

这里是AI生成的注释解析:

name: testso
version: '0.12'
summary: My test Snap
description: A test Snap that needs libtest.so
base: core22
  • name: Snap 包的名称(不可更改,除非重新打包)。
  • version: Snap 的版本号,可以自由修改(如 0.13)。
  • summary: 简短描述,可自定义。
  • description: 详细描述,可自定义。
  • base: 基础 Snap 镜像(core22 是 Ubuntu 22.04 的基础),通常不需要修改。
grade: stable
confinement: strict
  • grade: 发布等级(stabledevel),stable 表示正式版,devel 表示开发版。
  • confinement: 沙盒严格程度(strictclassic)。strict 是默认的安全模式,classic 会放宽限制(不推荐,除非必要)。
parts:
  testso:
    plugin: make
    source: ../src
    build-packages:
      - build-essential
    stage-packages:
      - libtest
  • parts: 定义 Snap 的构建部分。
    • testso: 自定义部分名称。
    • plugin: make: 使用 make 插件编译代码(适用于 Makefile 项目)。
    • source: ../src: 源代码路径(相对于 snapcraft.yaml),可修改为实际路径。
    • build-packages: 构建时依赖的系统包(如 gccmake)。
    • stage-packages: 运行时需要的系统包(如 libtest)。如果 libtest 是自定义库,建议移除并改用下面的 mylib 部分。
mylib:
    plugin: nil
    source: ../lib
    stage: [libtest.so]
    prime: [libtest.so]
  • mylib: 自定义部分名称,用于打包本地库 libtest.so
    • plugin: nil: 表示不使用任何插件,手动管理文件。
    • source: ../lib: 本地库的路径(相对于 snapcraft.yaml),可修改为实际路径。
    • stage: [libtest.so]: 将 libtest.so 复制到 stage 目录(供后续步骤使用)。
    • prime: [libtest.so]: 将 libtest.so 复制到最终 Snap 包中。
apps:
  testso:
    command: testso
    environment:
      LD_LIBRARY_PATH: $SNAP/usr/lib:$SNAP/lib
  • apps: 定义 Snap 的可执行命令。
    • testso: 自定义应用名称。
    • command: testso: 可执行文件名(相对于 Snap 的 bin 目录)。如果可执行文件不在根目录,需修改为完整路径(如 $SNAP/usr/bin/testso)。
    • environment: 运行时环境变量。
      • LD_LIBRARY_PATH: 显式指定库搜索路径,确保能找到 libtest.so。如果 libtest.so 在非标准路径(如 $SNAP/lib/mylib),需更新此路径。

LD_LIBRARY_PATH

  • 如果 libtest.so 被打包到 $SNAP/lib/mylib,修改为:
LD_LIBRARY_PATH: $SNAP/lib/mylib:$SNAP/usr/lib:$SNAP/lib

command 路径

  • 如果 testso 编译后不在 Snap 根目录,而是在 $SNAP/usr/bin,修改为:
command: usr/bin/testso

snap打包:

回到主目录打包snap:

cd /home/orangepi/snap_packet_test/gccso/

打包snap:

snapcraft pack .

打包成功:

测试snap文件:

将文件复制到其他文件夹:

cp testso_0.12_all.snap /home/orangepi/snap_packet_test/test_1/

转到对应的测试文件夹:

cd /home/orangepi/snap_packet_test/test_1/

安装打包好的snap文件:

sudo snap install --dangerous testso_0.12_all.snap

测试运行:

testso

打包后完整命令交互过程列出:

orangepi@orangepi3b:~/snap_packet_test/gccso$ snapcraft pack .
Packed testso_0.12_all.snap
orangepi@orangepi3b:~/snap_packet_test/gccso$ cp testso_0.12_all.snap /home/orangepi/snap_packet_test/test_1/
orangepi@orangepi3b:~/snap_packet_test/gccso$ cd /home/orangepi/snap_packet_test/test_1/
orangepi@orangepi3b:~/snap_packet_test/test_1$ sudo snap install --dangerous testso_0.12_all.snap
testso 0.12 installed
orangepi@orangepi3b:~/snap_packet_test/test_1$ testso
test1_print
test2_print
test3_print

重构snap:

在主项目路径可以通过 snapcraft clean 清除构建的snap

sudo snapcraft clean

删除snap:

在测试安装的 Snap 环境中,已安装的 Snap 包可以通过 snap remove 命令卸载

sudo snap remove testso

任何目录都能运行:

目前发现安装好这个snap软件包后,任何目录都能执行程序:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NULL指向我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值