0%

树莓派交叉编译

前言

使用树莓派交叉编译helloworld

安装32位库

由于ubutnu 13.04之后已经没有了ia32-libs这个东西,所以在执行sudo apt-get install ia32-libs 会找不到对应的包。

1
2
$ dpkg-query -S libgtk-x11-2.0.so.0   (查寻64位库)
$ sudo apt-get install libgtk2.0-0:i386 (安装对应的32位库)

然后再次查看

$ dpkg-query -S libgtk-x11-2.0.so.0 (查寻64位库)

可以看到多了两个32位的库

1
2
3
4
libgtk2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
libgtk2.0-0:i386: /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0
libgtk2.0-0:i386: /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0.2400.31
libgtk2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.31

然后安装arm下的gcc,deepin的名字和Ubuntu的貌似不一样(我也没用Ubuntu),Ubuntu下貌似是arm-linux-gnueabihf-gcc,下面这两种编译器对浮点运算有不同的处理,反正安装就好(⊙o⊙)…只装一个估计也行。

1
2
$ sudo apt-get install gcc-arm-linux-gnueabi
$ sudo apt-get install gcc-arm-linux-gnueabihf

### 添加环境变量

将tools 相关文件的路径添加到$HOME/.bashrc文件中

$ sudo gedit ~/.bashrc

将这句加入到其中文件的尾部

export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

然后执行$ source .bashrc即可。

使用$ arm-linux-gnueabihf-gcc –v验证是否成功。最后几行大概是这么个东西,就安装成功了。

–build=x86_64-linux-gnu –host=x86_64-linux-gnu –target=arm-linux-gnueabi –program-prefix=arm-linux-gnueabi- –includedir=/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 6.1.1 20160705 (Debian 6.1.1-9)

在eclipse中选择交叉编译

首先安装C/C++版本的eclipse,然后File->New->c project
创建C工程

这么填是因为我们之前使用的是apt-get安装,执行文件的位置在/usr/bin下可以找到。写好代码之后直接在Project->Build Project进行编译然后在Debug文件夹下即可找到可执行文件。
当然也可以直接和gcc使用差不多的用法来进行编译

arm-linux-gnueabihf-gcc main.c -o main

使用file命令查看生成文件的格式。内容中会有ARM架构的说明。

1
2
$file filename
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=3b39eb916c39ca0f46973d55338a9f156aae3bd8, not stripped

这个教程似乎不错

在树莓派运行helloworld

在这里得到的文件使用的是nfs在局域网进行交换的方法。给出一篇nfs的博客,只需要看最前面nfs的部分即可。

树莓派上面没有安装nfs,使用sudo apt-get install nfs-common进行安装nfs,然后进行挂载。当然不用nfs都行,使用git将文件放入git仓库,然后在树莓派进行git clone即可拿到文件。

然后在树莓派上执行运行可执行文件即可看到hello的输出。
$ ./main

听说好看的人都关注了我的公众号《泫言》