linux支持CPU架构,如何在Ubuntu Core中支持多个CPU架构 (architecture)

本文详细介绍了如何使Snap应用在Ubuntu Core上支持多种CPU架构,如Intel的X86和ARM架构。关键在于使用wrapper脚本来根据SNAP_ARCH变量动态调整库路径。通过示例代码,展示了如何在wrapper脚本中根据架构类型设置LD_LIBRARY_PATH,确保正确加载对应架构的库文件。这样,应用就能在不同架构间无缝运行。
摘要由CSDN通过智能技术生成

在今天的文章中,我们将介绍如何在我们的Ubuntu Core Snap应用中支持多个CPU架构.由于CPU架构的不同,我们的snap应用需要访问不同架构中的和架构名称相关联的lib目录或binary目录.比如对Intel的X86架构来说,他们库的路径中通常含有"x86_64-linux-gnu",而对于ARM架构来说,通过含有"arm-linux-gnueabihf"字样.那么我们如何来使得我们的应用来适配所有的架构呢?

今天我们就以一个例子来说明这个问题:

我们可以在我们的terminal中打入如下的命令:

$ git clone e https://git.launchpad.net/opengles-snaps

我们可以看一下我们的snapcraft.yaml文件:

snapcraft.yaml

name: opengles-sample

version: "1.0"

architectures: [ all ]

summary: OpenGL ES samples (X11)

description: Simple OpenGL ES sample

confinement: devmode

type: app

apps:

es2-tringle:

command: bin/wrapper

plugs: [home, opengl, x11, unity7]

parts:

opengles-sample:

plugin: make

build-packages:

- libx11-dev

- libegl1-mesa

- libgles2-mesa-dev

stage-packages:

- libegl1-mesa

- libgles1-mesa

- libgles2-mesa

- libx11-dev

- libxcb-composite0

- libxcb-keysyms1

- libxcb-randr0

- libxcb-shm0

- libxcb-xv0

- libxcb1

- libxext6

- libxi6

- libxinerama1

- libxpm4

- libx11-6

source: src

wrapper-copy:

plugin: copy

files:

wrapper: bin/wrapper

这是一个简单的opengl的例程.我们注意到的是它的应用

es2-triangle的执行文件是一个位于bin下的wrapper脚本.通过如果我们的应用设计为多架构的,那么它的执行文件或库都是和架构特有的名称是相关的.在这种情况下,我们必须采取运行一个脚本wrapper的方法来完成.在我们的脚本中,我们可以根据我们的架构来实现对不同路径的访问.关于如何利用wrapper来启动我们的应用,我们也可以参照我的另外一篇文章"

运用wrapper来帮助我们启动snap应用".

wrapper:

#!/bin/bash

if [ "$SNAP_ARCH" == "amd64" ]; then

ARCH="x86_64-linux-gnu"

elif [ "$SNAP_ARCH" == "armhf" ]; then

ARCH="arm-linux-gnueabihf"

elif [ "$SNAP_ARCH" == "arm64" ]; then

ARCH="aarch64-linux-gnu"

else

ARCH="$SNAP_ARCH-linux-gnu"

fi

# PATH for dri

export LD_LIBRARY_PATH=$SNAP/usr/lib/$ARCH/dri/:$LD_LIBRARY_PATH

# Tell libGL where to find the drivers

export LIBGL_DRIVERS_PATH=$SNAP/usr/lib/$ARCH/dri

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SNAP_LIBRARY_PATH

# debug

echo "-> debugging for wrapper"

echo $LD_LIBRARY_PATH

exec "$SNAP/bin/test_es2tri" "$@"

在上面的代码中,我们可以变量

SNAP_ARCH来判断我们当前的运行的架构,再根据这个架构,我们来实现对不同架构下的运行库的访问.

在X86下安装好我们的snap,并运行这个例子:

0818b9ca8b590ca3270a3433284dd417.png

command: desktop-launch $SNAP/lib/x86_64-linux-gnu/bin/rssreader 显然这句的命令是依赖于我们的CPU的架构的.这样的应用只能在X86的平台中运行.如果需要这个应用能够在ARM的架构中运行,我们必须按照我们上面的方法做才可以.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值