arm-linux交叉编译ACE

发布者:asd999ddd最新更新时间:2016-12-03 来源: eefocus关键字:arm-linux  交叉编译  ACE 手机看文章 扫描二维码
随时随地手机看文章

ACE应用于主站数据采集核心的开发已告一段落了。现在打算涉足嵌入式linux应用程序的设计。俗话说“工欲善其事,必先利其器”,ACE支持arm系列的嵌入式系统,当然首先折腾他了,后期还打算整整apache的运行时库apr。嵌入式系统的仿真平台采用skyeye,在这样一个平台里我已经实现了nfs mount 宿主机目录。测试交叉编译后的程序十分方便。

     网上搜到一篇《机电之家 嵌入式Linux系统攻略--ACE程序移植过程详细解析》交叉编译工具是Moxa tool chain for DA66x,写的满详细,主要参照它就完成了arm-linux的交叉编译。详细过程如下:

1.解压ace源代码到/root

2.设置环境变量ACE_ROOT如:export ACE_ROOT=”/root/ACE_wrappers”

3.将$ACE_ROOT/ace/config-linux.h复制成$ACE_ROOT/ace/config.h

4.$ACE_ROOT/include/makeinclude/platform_linux.GNU复制成 $ACE_ROOT/include/makeinclude/platform_macros.GNU并修改platform_macros.GNU文件,添加编译器名称:

CC = arm-linux-gcc

CXX =arm-linux-g++

CXX_FOR_VERSION_TEST ?= $(CXX)

删除:


ifeq ($(insure),1)

  CC  = insure

  CXX = insure

else

  CC  ?= gcc

  CXX ?= g++

endif


 

5.修改$ACE_ROOT/include/makeinclude/platform_g++_common.GNU文件,注释第134行:LDFLAGS += -Wl,-E (ACE6.0)

6.gperf目录下的测试程序无法编译,因为这些测试程序要用$(ACE_ROOT)/apps/gperf/src/目录下的相关源代码生成的gperf程序去完成下一步动作,而这个程序是利用交叉编译器生成的,不能在PC上运行。因此在GNUmakefile里面的all:后面,我们要删除cppinset adainset cinset iinset iinset2 m3inset pinset preinset taoinset tinset这些目标对象。

7.进入$ACE_ROOT,直接输入make

8. 将$ACE_ROOT/lib/arm下的libACE.so.6.0.0建立链接libACE.so,将链接文件拷贝到LD_LIBRARY_PATH指定的目录中

       交叉编译ACE顺利完成后,下面我们写个简单的测试程序以验证交叉编译后的ACE是否能正常使用,测试可以分2步,第一步测试能否正常编译通过这个测试程序,第二步测试基于ACE的程序能否在skyeye仿真系统里正常运行。下面开始第一步测试:

 #include "time.h"
#include "ace/Log_Msg.h"
#include "spawn.h"
typedef struct {
    float a;
    float b;
  } substruct;


 struct mystruct{
    int i;
  int jj;
    substruct r;
  } ;

void foo (void)
{
  ACE_TRACE (ACE_TEXT ("foo"));
  ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardner\n")));
}
int ACE_TMAIN(int argc,int argv[])
{
   struct mystruct ddd;
   ddd.jj =111;
   struct timespec _TimeSpec;
   posix_spawnattr_t _Posix;
   _TimeSpec.tv_sec = 111;
   _Posix.__flags =1111;
  ACE_TRACE(ACE_TEXT ("main"));
  foo(); 
  ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnight\n")));
}

         将上面的代码拷贝保存为ace_test.cpp,然后使用阿arm-linux-g++交叉编译。ACE的头文件使用-I标明,库文件路径使用-L标明,ace_test需要的动态库使用-l标明:[root@localhost nfsroot]# arm-linux-g++ -o ace_test -I/usr/local/include -L/usr/local/lib -lACE ace_test.cpp如果编译提示“ld: skipping incompatible /usr/local/lib/libACE.so when searching for -lACE”说明ACE编译工具指定错误,编译出来的库不是arm-linux能识别的。无出错信息则表示第一步测试通过。

         第二步测试中,在skyeye里挂载宿主机的nfsroot目录,并链接其中的lib目录:
mount -o nolock 192.168.1.1:/nfsroot /home
ln -s /home/lib /lib

这样就可以在skyeye里执行刚刚宿主机里编译的ace_test了。如果提示缺失动态库请在/usr/local/arm/3.4.1/arm-linux/lib拷贝到宿主机的nfsroot/lib下。我一直加了:

libm.so.6            libACE.so            librt-2.3.2.so
libdl.so             libdl.so.2           libm-2.3.2.so
librt.so.1           libm.so              libpthread-0.10.so
libgcc_s.so.1        libstdc++.so.6.0.1   libstdc++.so
ld-linux.so.2        libACE.so.6.0.0      libdl-2.3.2.so
libc.so.6            libgcc_s.so          libpthread.so.0
libstdc++.so.6       libACE.so.6.0.0.bak  libc-2.3.2.so
librt.so             ld-2.3.2.so

最后出现了运行结果:

arm-linux交叉编译ACE - yu_hongchang - 中原大鱼的博客

 第二步测试完毕,ACE在嵌入式linux里成功运行了!

      再看看lib目录大小总计近30M了,乖乖赶快减肥。当然使用arm-linux-strip。瘦身后总大小在4M左右,放在ramdisk里还会使用gzip压缩一次,大小就变成了2M多了。可以满足实际要求了!

纪录下另外一种编译ACE的方法,只编译ACE动态库转自:http://hi.baidu.com/%BD%DB%D7%D3%CF%E3%B3%A6/blog/item/423cd3c3a9d983ba8226acb9.html

1. 创建环境变量 
export ACE_ROOT=/root/ACE_wrappers 
2. 生成makefile文件 
#cd /root/ACE_wrappers/ace 
#../MPC/mpc.pl -type make -include ../bin/MakeProjectCreator/config ace.mpc 
完了之后会生成Makefile.ACE 
3. config.h文件 
#ln -s config-linux.h config.h 
如果要使用epoll,需要在config.h中增加宏定义 
#define ACE_HAS_EVENT_POLL 
或者修改mpc文件重新生成makefile文件也可以。 
4.编译 
#make -f Makefile.ACE 
----------------------------如果是交叉编译ACE-------------------------------

编译的过程和前一篇linux下编译ACE相同, 不过要对ace.mpc文件稍加修改 
//**********************
verbatim(make,local){
CXX=arm-linux-g++
AR=arm-linux-ar
}
//**********************
添加星号线之间的部分就可以。。也可以不修改mpc文件,直接 
make -f Makefile.ACE CXX=arm-linux-g++


关键字:arm-linux  交叉编译  ACE 引用地址:arm-linux交叉编译ACE

上一篇:sam9261s片内sram映射
下一篇:u-boot1.1.6在s3c2440上移植

推荐阅读最新更新时间:2024-03-16 15:23

三星Galaxy Ace零元购机 3.5寸Android
  在此前的2011年移动世界大会中,三星公司除公布了三星Galaxy S2以及三星Galaxy Tab 10.1外,还将面向中低端智能手机市场推出三星Galaxy Ace、三星Galaxy Gio、三星Galaxy Fit以及三星Galaxy Mini四款全新产品。 签约两年的消费者将免费得到三星Galaxy Ace   其中,硬件配置较为出色的三星Galaxy Ace目前已率先登陆英国市场。据悉,三星Galaxy Ace将由运营商Vodafone定制,并且在运营商Vodafone官方网站中已经能够购买到这款手机。而在消费者非常关心的售价方面,运营商Vodafone更是将为签约两年的消费者免费提供三星Galaxy Ace
[手机便携]
交叉编译并移植opencv3.0.0到arm板
问题 项目需求,交叉编译opencv,并移植到arm中。 在opencv2.0以上的版本编译都要借助于cmake工具生成Makefile 2.0一下版本才是使用configure生成Makefile 请确保宿主机已经安装cmake和cmake-gui工具,如果请自行安装 sudo apt-get install cmake cmake-qt-gui cmake-curses-gui 开发环境 开宿主机:Fedora9.0 交叉编译器:友善之臂arm-linux-gcc4.4.3 自动化编译工具: cmake version 2.8.12.2 编译 下载opencv源代码 项目官网:http://opencv.org
[单片机]
<font color='red'>交叉</font><font color='red'>编译</font>并移植opencv3.0.0到arm板
ARM-Linux驱动--MTD驱动分析(二)
主机:Gentoo Linux 11.2 with linux kernel 3.0.6 硬件平台:FL2440(S3C2440)with linux kernel 2.6.35 1、mtd_notifier结构体 //MTD设备通知结构体 struct mtd_notifier { void (*add)(struct mtd_info *mtd);//加入MTD原始/字符/块设备时执行 void (*remove)(struct mtd_info *mtd);//移除MTD原始/字符/块设备时执行 struct list_head list;//list是双向链表,定义在include/li
[单片机]
ARM-Linux GPIO操作事宜
1.在嵌入式Linux GPIO表示为 S3C2410_GPx(n) ,其中x的取值为 A,B,C,D,E,F,G,H..... ,表示那个GPIO口,n的取值为 1,2,3,..... 表示第几个管脚。 例如 B口的第六管教:S3C2410_GPB(6) D口的第12管教:S3C2410_GPD(12) ..... 注 这些宏定义在arch/arm/mach-s3c2410/include/mach/gpio-nrs.h,使用#include mach/gpio-nrs.h 以下包含#include mach/hardware.h linux/gpio.h mach/regs-gpio.h 2.设置gpio的工作模
[单片机]
交叉编译环境的建立
1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了): $ sudo apt-get install gcc g++ libgcc1 libg++ make gdb 如果上面这个安装不行,可以试试 $ sudo apt-get install build-essential 2. 下载arm-linux-gcc-4.3.2.tgz到任意的目录下,进入这个文件夹 $ sudo tar xvzf arm-linux-gcc-4.3.2.tgz C / 注意:C 后面有个空格,并且 C 是大写的,它是英文单词 Change 的第一个字母, 在此是改变目录的意思。 执
[单片机]
Ubuntu9.10制作ARM交叉编译
本环境内核版本:Linux ubuntu910 2.6.31-21-generic #59-Ubuntu SMP i686 GNU/Linux 准备软件包如下: bison_13a2.3.dfsg-4build1_i386.deb build-essential_11.4_i386.deb flex_2.5.33-10build1_i386.deb libncurses5-dev_5.6+20071124-1ubuntu2_i386.deb m4_1.4.8-1build1_i386.deb patch_2.5.9-5_i386.deb gcc-3.4.5.tar.gz glibc-2.3.6.tar.gz l
[单片机]
配置arm-linux虚拟机开发环境
基础工具配置 系统是ubuntu12.01版本,感觉还比较好用,挺稳定的,进入系统后,如果安装时创建了用户的话,root是没有密码的:   #sudo passwd root 配置root的密码。接着改VI,因为ubuntu系列用的vim是common版本的,方向键会输出ABCD。   #sudo apt-get remove vim-common #sudo apt-get install vim   下载的时候需要配置软件源,这很影响速度。 #sudo cp /etc/apt/sources.list /etc/apt/sources.list.old //先备份一下 #sudo gedit /etc/apt/
[单片机]
配置<font color='red'>arm-linux</font>虚拟机开发环境
Diodes 公司入围 2017 年度 ACE 奖项
Diodes 公司荣幸宣布旗下创新产品 PI3USB31532 USB 3.1 Gen 2/DisplayPort 1.4 Type-C 交叉转换器,入围 ACE 奖项中竞争激烈的逻辑/接口/内存类别。 Diodes 获得提名殊荣,主要是由于领先大多数半导体制造商,推出 USB 3.1 Gen 2 转换器,此装置可实作替代模式切换功能,透过 USB 分享非 USB 数据。这项功能预计成为新兴消费性装置的主流规格,其可支持在相同连接器和缆线上,多任务传输 DisplayPort 及 USB 讯号,甚至可能做到同步供电,创造出真正的「单埠」典范。 Diodes 公司精准频率及联机产品部门经理 Andy Tsong 表示:「我
[嵌入式]
Diodes 公司入围 2017 年度 <font color='red'>ACE</font> 奖项
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved