linux so 发布,如何在Linux上构建发布包含.so动态库的snap安装包
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安装包相关推荐
- 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件
转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...
- linux系统export,Linux入门进阶 - 如何在Linux中使用export命令
原标题:Linux入门进阶 - 如何在Linux中使用export命令 来自: Linux迷 链接:https://www.linuxmi.com/linux-export.html Linux ex ...
- 如何在Docker上构建Node.js应用程序
Docker has been the latest trending topic over the past couple of years and if you haven't been to s ...
- OpenCASCADE:Windows平台上构建OCCT使用的第三方库
OpenCASCADE:Windows平台上构建OCCT使用的第三方库 OpenCASCADE:Windows平台上构建OCCT使用的第三方库 Tcl/Tk 从源安装:Tcl 从源安装:Tk Free ...
- 手机刷linux影音,在优麒麟/Ubuntu上构建麒麟影音snap包
Snaps是易于创建和安装的容器化软件包,它们可以自动更新并且安全运行.同时由于它们捆绑了本身所需的依赖,snaps 应用可以不加修改的运行在大部分Linux系统上. 麒麟影音是优麒麟默认的视频播放器 ...
- linux 进程suricata,如何在 Linux 系统上安装 Suricata 入侵检测系统
随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要.然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越 ...
- linux卸载kodi,如何在Ubuntu上安装Kodi 18 Beta
Kodi的Beta版周期很长.很棒,因为它有助于将错误排除在生产版本之外,而且还可以保留数月的新功能.值得庆幸的是,Kodi开发人员提供了可供测试和使用的"unstable"软件包 ...
- 深度linux安装spotify,如何在 Linux 上使用 snap 安装 Spotify(声破天)
如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐? Spotify 是一个可让你访问大量歌曲的数字音乐流服务.你可以免费收听或者购买订阅,可以创建播放列表.订阅用户可以免广告 ...
- linux中央服务器,如何在Linux上搭建一个Git中央仓库
前言:本教程只面向那些个人开发者,想要自己在linux上搭建一个git中央仓库用来上传发布自己的项目.但是对于团队来说可能有更高的要求,可以使用gitlab搭建一个可视化的类似github的版本管理系 ...
最新文章
- 适用于CUDA GPU的Numba 随机数生成
- 把数据自动填入exe的输入框_2000余字长文讲解Excel中的“数据验证”,我收藏了...
- HDU 4630 No Pain No Game 树状数组+离线操作
- python中的装饰器-(重复阅读)
- linux cd -目录,linux cd
- 列表视图案例1——阅读古诗
- 自己动手写Docker系列 -- 5.2实现查看运行中的容器
- 鸿蒙 OS 2.0 来了!值得开发者关注的是什么?
- javaweb实训第三天上午——Servlet
- 《Hadoop MapReduce实战手册》一1.10 使用MapReduce监控UI
- 苹果爸爸发飙,封杀 React Native?
- SQL2016安装错误:安装程序无法与下载服务器联系。请提供 Microsoft R Open 和 Microsoft R Server 安装文件的位置
- matlab设置柱状图空白,MATLAB画柱状图时形状填充及颜色改变问题
- 锐取电视墙服务器型号,锐取录播系统 CL4000系列多媒体录播一体机--投影时代产品专区...
- 新冠病毒到底对患者的肺做了什么?康复者会像SARS一样出现肺纤维化吗?
- 史上最全APP推广渠道,看看你最熟悉哪一种
- 高仿有赞微小店SplashView
- tomcat 配置 数据库连接池
- GSE184854 ccr2敲除小鼠和wt小鼠merge到一起之后,对ccr和wt组别进行harmony ,大致分为上皮 内皮 髓系 淋巴系 ,取髓系,分为dc 单核monocyte 巨噬细胞,取巨噬
- 什么是防关联浏览器?