arm-linux-gcc 4.4.2 的安装及version `GLIBCXX_3.4.9' not found 的解决_arm gcc 4.4 ftp-程序员宅基地

技术标签: 交叉编译  嵌入式  

在RHEL 5平台上安装配置arm-linux-gcc

在linux平台上安装好的基础上,开始配置arm-linux-gcc,使其正常工作

 
一,安装前准备
 
1,下载并安装arm-linux-gcc
 
arm-linux-gcc  4.4.2的版本在http://download.csdn.net/download/yongan1006/3297959这里可以下载
 
下面的这个是ARM官方给的下载链接http://www.codesourcery.com/gnu_toolchains/arm/download.html,然后将HOST选择为IA32 GNU/Linux,点击下载就可以了。不过前缀为arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu而不是arm-linux-。
在友善之臂官方网站http://www.arm9.net/download.asp下载arm-linux-gcc4.4.3。
 
2,删除之前安装有旧版本

执行 [root@localhost ~]# rm -rf /opt/arm

 
3,对新版本arm-linux-gcc-4.4.3进行解压

(注意,如果我们加上了-C,那么就会自动解压到/usr/local/arm/这个目录下),但是友善之臂按照下列方式解压,不会解压到/usr/local/arm/目录下的,这是因为友善之臂把/usr/local/arm/目录修改成了 /opt/FriendlyARM/toolschain/,除非自己在把它修改过来

[root@localhost ~]# tar -ivxzf /smbroot/arm-linux-gcc-4.4.3.tar.gz  -C /
 
4,修改配置文件

将arm-linux-gcc添加到环境变量中,因为arm-linux-gcc的命令是在/usr/local/arm/4.4.3/bin下,其目的通过对全局变量绑定使之能够在任意一个目录下能够执行该命令。

打开设置文件
 
[root@localhost opt]# vi /etc/profile
 
在打开的文件的
 
# Path manipulation
if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
        pathmunge /usr/local/arm/4.4.3/bin
fi
或者在文件末尾添加
 
export PATH=$PATH:/usr/local/arm/4.4.3/bin
 
保存退出
 
5,立即使新的环境变量生效,不用重启电脑

[root@localhost opt]#  source /etc/profile
 

6,检查是否将路径加入到PATH:

[root@localhost opt]# echo $PATH
 
显示的内容中有/usr/local/arm/4.4.3/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。
 
7,测试是否安装成功

首先,执行find命令查询一下arm-linux-gcc的位置
 
[root@localhost ~]# find / -name arm-linux-gcc
 
/opt/arm/toolschain/4.4.3/bin/arm-linux-gcc
[root@localhost ~]#

可以看到arm-linux-gcc的位置与环境变量中设定的路径一致
 
接下来查询arm-linux-gcc的版本
 
[root@localhost bin]# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1) 
[root@localhost bin]#

可以看到arm-linux-gcc的版本号,至此,arm-linu-gcc已成功安装。
 
 二,测试
 
1,在终端中编写test.c测试程序

[root@localhost ~]# vi test.c
[root@localhost ~]# arm-linux-gcc test.c -o test
/opt/arm/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/arm/toolschain/4.4.3/lib/libppl_c.so.2)
/opt/arm/toolschain/4.4.3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/arm/toolschain/4.4.3/lib/libppl.so.7)
[root@localhost ~]#

用以下命令查看
 
[root@localhost ~]# strings /usr/lib/libstdc++.so.6|grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_FORCE_NEW
[root@localhost ~]# 
可以看到libstdc++.so.6的最高版是GLIBCXX_3.4.8,而不是GLIBCXX_3.4.9,因此需要对libstdc++.so.6进行升级
 

方法一,直接下载较高版本的库libstdc++.so.6.0.10,网址http://download.csdn.net/source/1670346

 

先删除libstdc++.so.6

 

[root@localhost ~]# rm /usr/lib/libstdc++.so.6

 

rm:是否删除 符号链接 “/usr/lib/libstdc++.so.6”? y

 

[root@localhost ~]#

然后将下载的libstdc++.so.6.0.10复制到/usr/lib/目录下面

 

[root@localhost ~]# cp /smbroot/libstdc++.so.6.0.10 /usr/lib/

 

[root@localhost ~]#

再建立符号链接

 

[root@localhost ~]# ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6

 

[root@localhost ~]#

检验是否替换完成

 

[root@localhost ~]#  strings /usr/lib/libstdc++.so.6|grep GLIBCXX

 

GLIBCXX_3.4

 

GLIBCXX_3.4.1

 

GLIBCXX_3.4.2

 

GLIBCXX_3.4.3

 

GLIBCXX_3.4.4

 

GLIBCXX_3.4.5

 

GLIBCXX_3.4.6

 

GLIBCXX_3.4.7

 

GLIBCXX_3.4.8

 

GLIBCXX_3.4.9

 

GLIBCXX_3.4.10

 

GLIBCXX_FORCE_NEW

 

GLIBCXX_DEBUG_MESSAGE_LENGTH

 

[root@localhost ~]#

重新测试交叉编译是否能用

 

[root@localhost ~]# arm-linux-gcc test.c -o test

 

[root@localhost ~]#

编译成功,执行

 

[root@localhost ~]# ./test

 

bash: ./test: cannot execute binary file

 

[root@localhost ~]

 

方法二,(参照网上搜来的办法,还没尝试)

 

下载最新版本glibc-2.13.tar.gz 包含libstdc++.so.6的库,

 

然后编译安装glibc 

 

wget  http://ftp.gnu.org/gnu/glibc/glibc-2.13.tar.gz

 

下载glibc-linuxthreads

 

wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.13.tar.gz

 

解压

 

tar -zxvf glibc-2.13.tar.gz

 

cd glibc-2.13

 

tar -zxvf ../glibc-linuxthreads-2.3.2.tar.gz

 

cd ..

 

./glibc-2.13/configure --prefix=/usr --disable-profile --enable-add-ons --libexecdir=/usr/lib --with-headers=/usr/include

 

make

 

make install

 

注意点:

 

1、要将glibc-linuxthreads解压到glibc目录下。

 

2、不能在glibc当前目录下运行configure。

 

 三、工具使用

1,编译工具arm-linux-gcc

 

例如arm-linux-gcc hello.c -o hello

 

2,反汇编工具arm-linux-gcc

例如arm-linux-objdump -D -S hello

 

3,elf文件查看工具arm-linux-readelf

 

arm-linux-readelf  -a hello (查库所有库)

 

arm-linux-readelf -d hello (查看动态链接库)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/li_Xing666/article/details/81510577

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签