使用 snap 安装共享库
Install shared library using snap
我有项目,由cmake构建,我想要带有snap的包。项目包括可执行文件和库(我们称之为a和liba(。
我的snapcraft.yaml文件看起来像:
name: a
version: "0.9"
summary: xyz
description: xyz
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict
apps:
a:
command: a
parts:
a:
plugin: cmake
source: ./a.zip
filesets:
manpages: [ usr/share/man ]
在 CMake 中,a 依赖于 liba(实际上a只是liba的"包装器">,用于 bash 脚本(。当我使用 Snapcraft 构建项目并安装该包(安装 --dangerous(时,从终端运行命令a工作正常。但是当我尝试构建依赖于liba的应用程序(使用gcc(时,我遇到了以"/usr/bin/x86_64-linux-gnu-ld:找不到-la"错误消息结尾的问题。首先,我必须包含标头,即使它们已使用">-I/snap/a/current..."安装到系统默认包含目录中(我知道snap将文件安装到/snap/目录中,但也许我只是在snapcraft.yaml上做错了什么(。然后我收到上面ld的消息。
我是快照包的新手,这是我的第一个项目。是否可以将liba安装为系统库(使用gcc构建时可见,使用系统默认目录中的包含(?
也许它有助于将a和 liba 拆分为依赖于liba构建的不同包,但我不确定它是否有助于解决共享库安装问题。
你对这个问题有一些经验吗?有什么建议吗?感谢您的回答。
恐怕快照并不适合您要做的事情。它们非常适合最终用户应用程序(例如,使库在脚本中有用的包装器(,但根据设计,它们与系统的其余部分隔离。可以在其中提供库以供其他应用程序使用,但这些应用程序需要在/snap/<snap name>/current/
的某个地方查找库和标头,这绝对不在默认搜索路径上。
请注意,您可以通过内容界面通过快照传送库,以便在其他快照中使用。不过,如果可以的话,我建议避免它;根据我的经验,它非常复杂和脆弱。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 在Ubuntu 16.04上安装Cilk时出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 使用 snap 安装共享库
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 使用CPACK时,请防止为已安装的共享库创建Namelink
- 如何在Windows Cmake中设置DLIB作为静态安装的共享LIB
- Android本机共享库安装路径
- 共享库的C++头文件,要安装哪些头?(最佳实践)
- 使用自动工具正确安装共享库的 config.h
- 尝试安装和使用 LAPACK++,加载共享库时出现问题
- 在C++中安装samba共享
- 在cmake中我如何从子目录安装共享库