红联Linux门户
Linux帮助

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

发布时间:2016-12-21 10:11:53来源:Ubuntu Core及手机专栏作者:Ubuntu手机
在今天的文章中,我们将介绍如何在我们的Ubuntu Core Snap应用中支持多个CPU架构.由于CPU架构的不同,我们的snap应用需要访问不同架构中的和架构名称相关联的lib目录或binary目录.比如对Intel的X86架构来说,他们库的路径中通常含有"x86_64-Linux-gnu",而对于ARM架构来说,通过含有"arm-linux-gnueabihf"字样.那么我们如何来使得我们的应用来适配所有的架构呢?
 
今天我们就以一个例子来说明这个问题:
https://git.launchpad.net/opengles-snaps
 
我们可以在我们的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应用"(http://www.linuxdiyf.com/linux/26258.html).
 
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,并运行这个例子:
如何在Ubuntu Core中支持多个CPU架构(architecture)
 
本文永久更新地址:http://www.linuxdiyf.com/linux/27099.html