Linux上要发布源码包比较容易,只要做个压缩包.tar.gz就可以。但是如果要做一个包含库和可执行文件的安装包,就比较麻烦。Linux的版本很多,需要做不同格式的安装包,比如.deb和.rpm,同时还需要做很多测试。现在有了Snap这个包管理系统,就会方便很多。Snap支持所有主流的Linux系统。

安装Snap和Snapcraft

按照官方指南进行安装。

这里是Debian安装的步骤:

$ sudo apt update

$ sudo apt install snapd

$ sudo snap install snapcraft –classic

注意,WSL是不支持snapcraft安装的:

Interacting with snapd is not yet supported on Windows Subsystem for Linux.

This command has been left available for documentation purposes only.

我用了Ubuntu 20.04。安装后可以装一个hello world测试下:

$ sudo snap install hello-world

hello-world 6.4 from Canonical✓ installed

$ hello-world

Hello World!

使用Snapcraft构建发布Snap安装包

生成一个初始工程:

$ snapcraft init

Created snap/snapcraft.yaml.

接下来的示例我会用到Dynamsoft Barcode Reader。

下载 Dynamsoft Barcode Reader for Linux。从这个压缩包里取出DynamsoftBarcodeReader.h, libDynamsoftBarcodeReader.so,以及示例代码ReadBarcode.cpp。

创建Makefile文件:

CC=gcc

CCFLAGS=-c

LDFLAGS=-L ./lib

DBRLIB=-lDynamsoftBarcodeReader

STDLIB=-lstdc++

TARGET=barcode-reader

OBJECT=ReadBarcode.o

SOURCE=ReadBarcode.cpp

# build rule for target.

$(TARGET): $(OBJECT)

$(CC) -o $(TARGET) $(OBJECT) $(STDLIB) $(DBRLIB) $(LDFLAGS)

# target to build an object file

$(OBJECT): $(SOURCE)

$(CC) $(CCFLAGS) $(SOURCE)

install:

mkdir -p $(DESTDIR)/usr/bin/

cp ./barcode-reader $(DESTDIR)/usr/bin/

mkdir -p $(DESTDIR)/usr/lib

cp ./lib/libDynamsoftBarcodeReader.so $(DESTDIR)/usr/lib

# the clean target

.PHONY : clean

clean:

rm -f $(OBJECT) $(TARGET)

这里面最重要的是install。要把库文件和生成的可执行文件拷贝到对应的目录里。

编辑snapcraft.yaml文件:

name: barcode-reader

base: core18

version: '7.4'

summary: Barcode SDK for 1D barcode, QR Code, Data Matrix, PDF417, Aztec Code, MaxiCode

description: |

An enterprise-class barcode SDK that enables you to efficiently embed barcode reading functionality in your web, desktop or mobile applications with a few lines of code.

icon: snap/gui/logo.png

grade: stable

confinement: strict

parts:

barcode-reader:

plugin: make

build-packages: [gcc, g++, make]

stage-packages: [libstdc++6]

source: src

apps:

barcode-reader:

command: barcode-reader

plugs: [home]

Snap安装包是在沙盒环境里运行的,所以需要指定权限。默认情况是不能读取系统里的文件的。添加home插件之后就可以从$HOME路径下读取文件。

编译安装包:

snapcraft

在本地安装进行测试:

sudo snap install --dangerous barcode-reader_7.4_amd64.snap

执行程序

barcode-reader ~/images/AllSupportedBarcodeTypes.tif

确认没有问题后,把安装包发布到Snap商店:

$ snapcraft login

$ snapcraft push --release=stable barcode-reader_7.4_amd64.snap

最后,通过在线编辑美化页面。

如何利用Snap包中的库文件创建Linux应用

安装Snap包:

$ sudo snap install barcode-reader

导出需要用的动态链接库:

$ export LD_LIBRARY_PATH=/snap/barcode-reader/current/usr/lib/

编译运行程序:

$ gcc -o app -L /snap/barcode-reader/current/usr/lib/ -lDynamsoftBarcodeReader -lstdc++

$ ./app

也可以使用相对路径直接编译运行程序:

$ gcc -o app -L /snap/barcode-reader/current/usr/lib/ -lDynamsoftBarcodeReader -lstdc++ -Wl,-rpath=/snap/barcode-reader/current/usr/lib/

$ ./app

源码

linux so 发布,如何在Linux上构建发布包含.so动态库的snap安装包相关推荐

  1. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  2. linux系统export,Linux入门进阶 - 如何在Linux中使用export命令

    原标题:Linux入门进阶 - 如何在Linux中使用export命令 来自: Linux迷 链接:https://www.linuxmi.com/linux-export.html Linux ex ...

  3. 如何在Docker上构建Node.js应用程序

    Docker has been the latest trending topic over the past couple of years and if you haven't been to s ...

  4. OpenCASCADE:Windows平台上构建OCCT使用的第三方库

    OpenCASCADE:Windows平台上构建OCCT使用的第三方库 OpenCASCADE:Windows平台上构建OCCT使用的第三方库 Tcl/Tk 从源安装:Tcl 从源安装:Tk Free ...

  5. 手机刷linux影音,在优麒麟/Ubuntu上构建麒麟影音snap包

    Snaps是易于创建和安装的容器化软件包,它们可以自动更新并且安全运行.同时由于它们捆绑了本身所需的依赖,snaps 应用可以不加修改的运行在大部分Linux系统上. 麒麟影音是优麒麟默认的视频播放器 ...

  6. linux 进程suricata,如何在 Linux 系统上安装 Suricata 入侵检测系统

    随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要.然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越 ...

  7. linux卸载kodi,如何在Ubuntu上安装Kodi 18 Beta

    Kodi的Beta版周期很长.很棒,因为它有助于将错误排除在生产版本之外,而且还可以保留数月的新功能.值得庆幸的是,Kodi开发人员提供了可供测试和使用的"unstable"软件包 ...

  8. 深度linux安装spotify,如何在 Linux 上使用 snap 安装 Spotify(声破天)

    如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐? Spotify 是一个可让你访问大量歌曲的数字音乐流服务.你可以免费收听或者购买订阅,可以创建播放列表.订阅用户可以免广告 ...

  9. linux中央服务器,如何在Linux上搭建一个Git中央仓库

    前言:本教程只面向那些个人开发者,想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目.但是对于团队来说可能有更高的要求,可以使用gitlab搭建一个可视化的类似github的版本管理系 ...

最新文章

  1. 适用于CUDA GPU的Numba 随机数生成
  2. 把数据自动填入exe的输入框_2000余字长文讲解Excel中的“数据验证”,我收藏了...
  3. HDU 4630 No Pain No Game 树状数组+离线操作
  4. python中的装饰器-(重复阅读)
  5. linux cd -目录,linux cd
  6. 列表视图案例1——阅读古诗
  7. 自己动手写Docker系列 -- 5.2实现查看运行中的容器
  8. 鸿蒙 OS 2.0 来了!值得开发者关注的是什么?
  9. javaweb实训第三天上午——Servlet
  10. 《Hadoop MapReduce实战手册》一1.10 使用MapReduce监控UI
  11. 苹果爸爸发飙,封杀 React Native?
  12. SQL2016安装错误:安装程序无法与下载服务器联系。请提供 Microsoft R Open 和 Microsoft R Server 安装文件的位置
  13. matlab设置柱状图空白,MATLAB画柱状图时形状填充及颜色改变问题
  14. 锐取电视墙服务器型号,锐取录播系统 CL4000系列多媒体录播一体机--投影时代产品专区...
  15. 新冠病毒到底对患者的肺做了什么?康复者会像SARS一样出现肺纤维化吗?
  16. 史上最全APP推广渠道,看看你最熟悉哪一种
  17. 高仿有赞微小店SplashView
  18. tomcat 配置 数据库连接池
  19. GSE184854 ccr2敲除小鼠和wt小鼠merge到一起之后,对ccr和wt组别进行harmony ,大致分为上皮 内皮 髓系 淋巴系 ,取髓系,分为dc 单核monocyte 巨噬细胞,取巨噬
  20. 什么是防关联浏览器?

热门文章

  1. C盘根目录的各个文件夹及文件的作用
  2. 牛客每日练习----德玛西亚万岁,求最值,小牛再战
  3. 单独编译使用WebRTC的音频处理模块
  4. 35. OP-TEE中基本算法接口调用实现
  5. 2010年9月_软件学报_基于树的数据收集MAXLAT
  6. TurboDemo软件使用教程:视频编辑
  7. 想了解漫画脸头像制作软件有哪些吗
  8. [浪风分享] 如何管理一个远程团队
  9. blog, blog.
  10. 【小波分析】三、正交小波的构造