要交叉编译,关键是要拿到交叉编译的工具,每个厂家的交叉编译工具都不一样,但是大同小异。

中兴的我拿到的是  STLinux-2.3.tar.tar 这样的压缩包

我解压到我的  /home 目录, 解压出来后的文件夹为  STLinux-2.3_uclibc

下来我们需要知道的是 目标板子上的芯片类型是什么类型, 中兴的为  sh4-linux-uclibc,

那我们就要找到 这个目标板子对应的 gcc 和 g++

中兴的就为 sh4-linux-uclibc-gcc 和 sh4-linux-uclibc-g++

所在的目录路径如下所示 :

[root@localhost bin]# pwd
/home/STLinux-2.3_uclibc/devkit/sh4_uclibc/bin

那我们下来就把这个目录路径添加到 环境变量里面, 让make的时候可以找到 这个路径,如下所示

PATH=$PATH:/home/STLinux-2.3_uclibc/devkit/sh4_uclibc/bin

在执行 env 这个命令, 就可以看到上面的目录路径添加到环境变量PATH里面了。

对于一个有 configure 文件的软件来说, 生成Makefile很简单,只需要指定 --host CC=""  CXX="" 即可。

具体为:

./configure --host=sh4-linux-uclibc CC="sh4-linux-uclibc-gcc" CXX="sh4-linux-uclibc-g++"

下来 make 就可以了。

对于自己写的 Makefile文件,思路是一样的, 下面贴出我自己的Makefile文件对应的交叉编译配置 :

CROSSPATH=/home/STLinux-2.3_uclibc/devkit/sh4_uclibc SHPREFIX=sh4-linux-uclibc- LIBPATH=./ztelib CC = ${SHPREFIX}gcc CXX = ${SHPREFIX}g++ CFLAGS = -Wall -lulockmgr -pipe -D_FILE_OFFSET_BITS=64 -D_DEBUG -DDEBUG -O2 LDFLAGS = -ldl ./ztelib/libfuse.a ${LIBPATH}/libsqlite3.a /home/STLinux-2.3_uclibc/devkit/sh4_uclibc/uclibc_target/usr/lib/libpthrea d.a /home/STLinux-2.3_uclibc/devkit/sh4_uclibc/uclibc_target/usr/lib/libc.a MODULE_INC = -I/home/fuse-2.8.3/include -I/home/sqlite-autoconf-3070500 -I./http -I${CROSSPATH}/uclibc_target/usr/include/c++/4.2 .4/ -I${CROSSPATH}/uclibc_target/usr/include/c++/4.2.4/sh4-linux-uclibc/ MODULE_LIB = -L${LIBPATH} -L./http -L${CROSSPATH}/uclibc_target/usr/lib -L${CROSSPATH}/uclibc_target CFLAGS += $(MODULE_INC) LDFLAGS += $(MODULE_LIB) LIBOBJS = debug.o hash.o fusex.o listex.o storex.o md5.o main.o markup.o http_fetcher.o TARGET = clientstore_D all: $(TARGET) $(TARGET): $(LIBOBJS) $(CXX) -o $@ $^ $(LDFLAGS) rm -fr *.o rm -fr *.xml clean: rm -f *.o rm -f $(TARGET) rm -f http/*.o # make rule %.o : %.c $(CC) $(CFLAGS) -c $^ -o $@ %.o : %.cpp $(CXX) $(CFLAGS) -c $^ -o $@

烽火的盒子也是一样的原理:

我拿到的烽火的交叉编译工具为 crosstools.tar

我也把它解压到  /home 目录

烽火的板子上的芯片为 mipsel-linux

我么也是找到对应的 gcc 和 g++

在 /home/crosstools/bin 这个目录下面有  mipsel-linux-gcc  和 mipsel-linux-g++

对于有 configure 文件的代码来说,执行下面的命令即可生成 Makefile文件 :

./configure --host=mipsel-linux  CC="mipsel-linux-gcc"  CXX="mipsel-linux-g++"

然后把 /home/crosstools/bin 这个目录添加到 环境编译 PATH中。

PATH="/home/crosstools/bin:$PATH" , 然后就可以直接make了。

自己写的Makefile文件例子如下:

CROSSPATH=/home/crosstools/bin SHPREFIX=mipsel-linux- LIBPATH=./fhlib CC = ${SHPREFIX}gcc CXX = ${SHPREFIX}g++ CFLAGS = -Wall -lulockmgr -pipe -D_FILE_OFFSET_BITS=64 -D_DEBUG -DDEBUG -O2 LDFLAGS = -ldl ./fhlib/libfuse.a ${LIBPATH}/libsqlite3.a /home/crosstools/mipsel-linux-uclibc/lib/libpthread.a /home/crosstools/mips el-linux-uclibc/lib/libc.a MODULE_INC = -I/home/fuse-2.8.3/include -I/home/sqlite-autoconf-3070500 -I/home/crosstools/mips-linux-uclibc/include/c++/4.2.0 -I/ home/crosstools/mips-linux-uclibc/include/c++/4.2.0/mips-linux-uclibc MODULE_LIB = -L${LIBPATH} -L/home/crosstools/mipsel-linux-uclibc/lib CFLAGS += $(MODULE_INC) LDFLAGS += $(MODULE_LIB) LIBOBJS = debug.o hash.o fusex.o listex.o storex.o md5.o main.o markup.o http_fetcher.o TARGET = clientstore_D all: $(TARGET) $(TARGET): $(LIBOBJS) $(CXX) -o $@ $^ $(LDFLAGS) rm -fr *.o rm -fr *.xml clean: rm -f *.o rm -f $(TARGET) rm -f http/*.o # make rule %.o : %.c $(CC) $(CFLAGS) -c $^ -o $@ %.o : %.cpp $(CXX) $(CFLAGS) -c $^ -o $@

make 后就会生成你自己所要的可以在目标板子上运行的可执行程序。

我在这次交叉编译时,发现一个问题, 就是 执行 pthread_attr_init 时, Segmentation fault 程序段错误。 原因就是libpthread.so 文件交叉编译的与目标板子上的版本不一致,后来我直接把 libpthread.a静态编译后就可以了。

中兴机顶盒子,烽火机顶盒子的交叉编译环境搭建相关推荐

  1. Ubuntu16.04下arm-linux-gcc交叉编译环境搭建

    Ubuntu下arm-Linux-gcc交叉编译环境搭建 参考:http://blog.csdn.net/hebbely/article/details/53992805 1.网上下载 arm-lin ...

  2. ubuntu14.04安装arm-linux-gcc,Ubuntu14.04下arm-linux-gcc交叉编译环境搭建

    Ubuntu下arm-linux-gcc交叉编译环境搭建 系统:Ubuntu 14.04 32bit 1.网上下载arm-linux-gcc-4.4.3.tar.gz 2.解压 sudo tar -x ...

  3. 龙芯交叉编译环境搭建之交叉编译工具链配置

     龙芯交叉编译环境搭建之 交叉编译工具链配置 1 概括 本文档适用于龙芯3A3000/4000 UEFI代码编译,重点指导交叉编译环境的搭建方法,对系统安装不做介绍. Ubuntu系统(版本为ubun ...

  4. PowerPC uboot交叉编译环境搭建说明

                                                                    MPC8640D uboot交叉编译环境搭建说明 目录 1 概括... ...

  5. XScale交叉编译环境搭建及MPlayer移植

    今天拿到一个博创PXA270A开发板,但是随机光盘挂掉了,新的光盘至少要等待下周,所以自己尝试搭建了一个交叉编译环境. 在google上找了一天,大部分的交叉编译环境搭建方法并不适用于此开发板.最后, ...

  6. Linux 上 NetBSD 交叉编译环境搭建

    Linux 上 NetBSD 交叉编译环境搭建 NetBSD 以高移植性著称,支持众多的处理器架构,并且它的代码和工具稳定性非常高,包括各种接口,工具等.并且由于 BSD 授权的宽松条件,对于构建商业 ...

  7. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  8. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  9. 【iMX6ULL】触觉 imx6ull开发板交叉编译环境搭建

      开发IMX6ULL需要有一个安装了交叉编译器的linux操作系统的开发环境,用于编译开发板的uboot.kernel.文件系统和应用软件.下面以触觉智能imx6ull开发板为例. 1.开发环境说明 ...

最新文章

  1. c 和java 内存,C分配和内存开销
  2. svn 怎么直接同步指定服务器的某个文件夹
  3. 高并发MPP查询引擎Impala初识
  4. 02基于注解开发SpringMVC项目(jar包,异步,request,参数传递,多选的接收,Model传参,map传参,model传参,ajax,重定向,时间日期转换)
  5. javascript 基础下
  6. 百度社会化分享组件使用问题
  7. json_decode用法
  8. Flash as3.0 保存MovieClip运动轨迹到json文件
  9. ps分辨率像素英寸和厘米的区别_南南带你免费学习超级强大的做图软件-PS(第一章:第二节)...
  10. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_12不使用骨架创建maven的java工程...
  11. 我的大学四年到毕业工作5年的学习路线资源汇总
  12. 小程序毕业设计 基于微信鲜花花店商城小程序毕业设计开题报告功能参考
  13. 运行Shell脚本的两种方法
  14. Angular二级导航栏
  15. Depthwise卷积与Pointwise卷积
  16. winds操作系统下登录本地MySQL和远程MySQL
  17. 中学物理教学参考杂志社中学物理教学参考编辑部2022年第21期目录
  18. A direct formulation for sparse PCA using semidefinite programming
  19. QML自定义控件Button
  20. Word2010 自动生成目录

热门文章

  1. RedHat学习笔记40--Samba文件共享服务
  2. java学习笔记 java编程思想 第4章 控制执行流程
  3. android 充电,在Android中加入充电指示
  4. js逆向知识-Ja3指纹学习
  5. 鬼影、雨雪天气点云噪声处理
  6. 【JDK】JCP, JEP, JLS, JSR介绍
  7. ERP系统上线的幸福曲线
  8. 「技术面试」问答中有什么十分实用的面试技巧?
  9. VLAN虚拟局域网配置
  10. 26、ADS使用记录之基于低通滤波匹配的超宽带功率放大器设计