Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库

一、前言

        这两天接到的两个关于Linux 平台相关的项目,一个Linux 桌面平台的工具开发,另一个是与客户使用的ARM 平台相关的工具编写。客户环境为三星 ARM 平台Linux 环境,因而需要我们公司提供arm 平台动态库给他们。于是,这个项目落在我的身上,好久没有编写过ARM平台相关的东西。因此,写下这篇文章,记录我使用Ubuntu 安装交叉编译工具<arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz>,编写使用交叉编译工具编写动态库过程。

二、开发环境:

Linux: Ubuntu 16.04  64位桌面版

交叉编译工具:arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第1张图片

 

三、安装交叉编译工具

3.1 将arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz  从共享文件夹中,复制的home/tool 目录下,如图:

进入tool目录,解压解压:arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz,得到 4.9.3 目录

执行如下命令:tar xvJf arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第2张图片

3.2 依据传统,^_^ 在 /usr/local/  新建一个 名称为 arm 目录,然后将 4.9.3 目录及目录下所有文件拷贝到arm 目录下,如:

cp -rf /4.9.3 /usr/local/arm/ , 进入arm 目录,可以看到4.9.3 目录。

3.3 配置Linux 系统环境变量,在 ~/.bashrc 最后一行添加,环境变量代码,如下,

vim ~/.bashrc

3.3.1 使用vim 打开bashrc , 进入文件最后一行,添加如下代码:

PATH=$PATH:/usr/local/arm/4.9.3/bin/
export PATH

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第3张图片

3.3.2 重启登录即可使用交叉编译工具,于是交叉编译工具安装配置完毕。

四、测试安装的交叉编译工具是否安装成功

4.1 检测交叉编译工具是否安装成功并且环境变量是否配置正确,可以使用如下方法测试:

4.1.1 查看gcc 编译版本,即可,使用如下命令:

arm-cortexa9-linux-gnueabihf-gcc -v

显示如下信息,则为安装成功。

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第4张图片

五、编写程序helloworld.c 程序验证arm-linux-gcc 是否可以使用

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第5张图片

5.1.1 使用gcc  helloworld.c -o helloworld 命令编译通过,代码没有问题,

5.2.1 将gcc 换成,arm-cortexa9-linux-gnuebinf-gcc

arm-cortexa9-linux-gnuebinf-gcc helloworld.c -o helloworld ,发现出现如下致命错误

arm-cortexa9-linux-gnueabihf-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
compilation terminated.

在度娘找了半天,任然没有发现问题的解决办法,好像没有人遇到过。o(╥﹏╥)o

o(╥﹏╥)o  ,是不是系统太老呢,(因为上一个项目是在Ubuntu 12.04 下开发的,因此,这个项目也是一样使用12.04),于是换个Ubuntu 17.04 系统看试一下,结果发现还是一样,出现这个问题。

研究,别人安装交叉编译工具的流程,发现都是这样子的,没有什么不同,安装完后,查看arm-cortexa9-linux-gnuebinf-gcc -v

都是可以看的到版本信息。这就奇怪了,╮(╯▽╰)     ╭╮(╯▽╰)╭

后来,偶然间发现上面的交叉编译工具是2016年出来的,会不会与Ubuntu 环境,有关系。抱着试试的态度,我又安装了一个Ubuntu 16.04 系统,然后按着步骤安装交叉编译工具,然后执行arm-cortexa9-linux-gnuebinf-gcc helloworld.c -o helloworld

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第6张图片

没有报错,正常通过。o(╥﹏╥)o    o(╥﹏╥)o  好像与Linux 版本有关系,为什么网上就没有人遇到过呢??????

开源项目虽好,但是兼容性太差了,差了一个版本就不能用,这也太坑了。╮(╯▽╰)╭

六、使用arm-cortexa9-linux-gnuebinf-gcc 编译动态库

6.1 编写MakeFile 和源代码。

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第7张图片

执行使用gcc make 导出.so , 正常运行,如下图:

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第8张图片

6.2 将MakeFILE 中gcc 该成arm-cortexa9-linux-gnueabihf-gcc

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第9张图片

make 导出.so 出现如下错误,

strip: Unable to recognise the format of the input file `libicmmodule.so'
Makefile:24: recipe for target 'libicmmodule.so' failed
make: *** [libicmmodule.so] Error 1

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第10张图片

发现,原来是Makefile 中使用strip 去除和剥掉一些符号信息和调试信息时报错,进入MakeFile 发现,没有将gcc 下的strip,修改成arm-cortexa9-linux-gnueabihf-gcc 对应的 arm-linux-strip 。

修改Makefile文件,

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第11张图片

重新make ,成功,O(∩_∩)O哈哈~。

Ubuntu 环境arm-linux交叉工具链安装 和 编译arm平台动态库_第12张图片

好了,终于写完了这篇文章了,对于小白的我,写下这篇文章还是非常有必要的,防止下次项目又会遇到,好记忆不如烂笔头。

半夜12点了,睡觉了。(¦3[▓▓] 晚安。

你可能感兴趣的:(C++,so库,Linux)