我有一个要为多种架构构建的 snap。现在,snapcraft.yaml
我在文件中定义了一个包装器作为要执行的二进制文件,它设置了应用程序运行所需的环境变量。
其中包含的一段脚本代码如下:
#!/bin/sh
ARCH='x86_64-linux-gnu'
export LD_LIBRARY_PATH=$SNAP/usr/lib/$ARCH:$LD_LIBRARY_PATH
显然,硬编码ARCH
不是最佳选择,因为非 amd64 版本将无法正常工作。但是,dpkg-architecture
使用 Snapcraft 时,arch 检测将不起作用。
如何在使用 Snapcraft 构建 snap 时动态检测包装器中的主机架构以设置正确的库路径?
代码可作为snappy 桌面示例。
答案1
二进制包装器(和服务文件)SNAP_ARCH
为您定义环境变量。不幸的是,这不是一个理想的解决方案,因为它们不是三元组,但它应该足以让您使用 case 语句或其他东西来实现这一点。
答案2
为了完整起见,我最终使用了以下 shell 代码片段:
#!/bin/sh
case "$SNAP_ARCH" in
"amd64") ARCH='x86_64-linux-gnu'
;;
"i386") ARCH='i386-linux-gnu'
;;
*)
echo "Unsupported architecture for this clock app build"
exit 1
;;
esac
然而,随着包装开始变得复杂,我更愿意考虑创建 Snapcraft 插件反而。