交叉编译环境
交叉编译环境以及开发板上-binsh:.hello:notfound(使用arm-linu。。。

交叉编译环境以及开发板上-binsh:.hello:notfound(使⽤arm-linu。
⽬标板是S3C2440.⾄于交叉编译环境的搭建就不多说了,⽹上很多教程.搭建好了交叉编译环境后,第⼀件事就是传说中的”Hello,World!”.⼀. 主机编译环节我使⽤的系统是ubuntu10.04,搭建好交叉编译环境后,终端输⼊arm-linux-gcc -v能够正常显⽰版本信息,但是输⼊sudo arm-linux-gcc -v后却显⽰命令⽆法找到.我试过很多种⽅法,⽐如sudo -s切换到root后,编辑$PATH,将编译器路径加⼊.然后exit到普通⽤户.仍然不能执⾏sudo arm-linux-gcc -v. 这⾥如果哪位⼤⽜知道是什么原因的可以留⾔告诉我,谢谢:)由于编译.c的⽂件后,要产⽣新的⽂件,因此要super的权限.⼜不能使⽤sudo arm-linux-gcc,于是可以先sudo -s到root⽤户,再使⽤arm-liunux-gcc来进⾏编译.⼆. ⽬标板执⾏环节我是使⽤FTP在主机和⽬标板之间传送⽂件.传送过去后要注意改变权限.这⾥要注意⼏点:1. 要确定ftp过来后的⽂件的默认的存放路径.这个只要在⽬标机的终端机上确认下即可.(这个地⽅没有确认可能就会显⽰找不到命令)2. 传送过来的⽂件要更改权限才能运⾏.可以⽤:chmod 777 hellochmod +x hello3. 执⾏./hello这时,报错:-/bin/sh: ./hello: not found三. 问题排除⽤过绝对路径也试过之后就确定并不是⽂件是否存在的问题,⽽是这个⽂件并不能被执⾏.GOOGLE之后可以发现,排除上⾯提到问题后,就将问题定位到动态链接库上.于是在主机上⽤arm-linux-gcc -static -o 来进⾏静态编译.然后将新产⽣的⽂件传到⽬标板上.可以发现通过静态编译的⽂件明显⽐动态编译的要⼤.然后再次执⾏./hello 可以看到屏幕上出现了久违的Hello,World!问题到这⾥还没有完,我们可以再思考下怎么彻底解决,⽽不是每次都使⽤静态编译.既然是动态库引起的问题,那么应该和编译器的版本有关.在安装编译环境的时候同时安装了3.4.1和4.3.3两个版本.⽤户⼿册上说其中3.4.1是⽤来编译u-boot的,4.3.3版本是⽤来编译Linux内核和Qtipia的,两个版本均可以⽤来编译应⽤程序.既然我们的内核使⽤4.3.3编译的,⽽我们刚才编译hello是使⽤3.4.1编译的,那么会不会是这个原因呢?于是我们试⼀下,将$PATH中的原来包含3.4.1/bin 的路径改为 4.4.3/bin . 修改的⽅法⽹上有很多.(直接export PATH=”想要的路径”)再次编译,下载.⽬标板上执⾏,成功显⽰”Hello,World!”.可以看到系统中动态库的⽀持和编译器还是有关的./lzjsky/p/3730183.html。
linux交叉编译环境搭建步骤

linux交叉编译环境搭建步骤在Linux系统下搭建交叉编译环境主要涉及以下几个步骤:2. 配置环境变量:将交叉编译工具链的路径添加到系统的环境变量中以便于使用。
可以在用户的`.bashrc`或`.bash_profile`文件中添加如下行:```bashexport PATH=<path_to_toolchain>/bin:$PATH```其中`<path_to_toolchain>`是指交叉编译工具链所在的路径。
3.设置目标平台的系统根目录:交叉编译时需要使用目标平台的系统库和头文件,因此需要设置目标平台的系统根目录。
可以通过以下方式设置:```bashexport SYSROOT=<path_to_sysroot>```其中`<path_to_sysroot>`是指目标平台的系统根目录。
4.编写一个简单的交叉编译项目:为了验证交叉编译环境是否搭建成功,可以编写一个简单的交叉编译项目进行测试。
例如,编写一个简单的C程序,将其交叉编译为ARM平台下的可执行文件。
```c#include <stdio.h>int maiprintf("Hello, world!\n");return 0;```将上述代码保存为`hello.c`文件。
然后,使用以下命令进行交叉编译:```basharm-linux-gnueabi-gcc -o hello hello.c```编译完成后,会生成一个名为`hello`的可执行文件。
在ARM平台上执行该可执行文件,将输出`Hello, world!`。
以上就是在Linux系统下搭建交叉编译环境的基本步骤。
根据具体的需求,可能还需要进行其他的配置和设置。
教你如何在优麒麟上搭建RISC-V交叉编译环境

教你如何在优麒麟上搭建RISC-V交叉编译环境由于 RISC-V 设备价格昂贵、不易采购等诸多原因,许多⼩伙伴虽然很感兴趣,但仍⽆法参与 RISC-V 开发⼯作,今天就教⼤家如何在优麒麟上搭建 RISC-V 交叉编译环境,快学起来吧!交叉编译(Cross Compile)指编译代码的平台,和执⾏编译后源代码的平台是两个不同的平台,⽐如在 x86/Linux 平台下使⽤交叉编译⼯具链编译 ARM/Linux 平台下的可执⾏⽂件。
今天我们要讲的就是在优麒麟(x86/Linux)上编译 RISC-V 架构可执⾏⽂件的⽅法。
我们为什么需要交叉编译呢,主要有以下考虑:01.性能与速度交叉编译的⽬标平台往往 CPU 性能较差,内存和磁盘性能也可能不能满⾜编译的要求,这时候就要依赖性能资源更好的编译主机进⾏编译。
02.缺乏编译条件就算⽬标平台性能⾜够且资源充⾜,可以本地编译,但第⼀个在⽬标平台运⾏的本地编译器总是需要我们通过交叉编译获得。
03.软件编译环境⼀个完整的 Linux 发⾏版需要由数百个包构成,⽽我们往往只关注需要在⽬标主机上安装的包,所以我们可以在交叉编译的主机上配置这些环境,⽽不是把时间浪费在配置⽬标主机的编译依赖上。
本⽂包含以下两部分:1、如何搭建⼀个 RISC-V 的交叉编译环境。
2、交叉编译 Linux 内核。
⼀、搭建 RISC-V 交叉编译环境。
通常来讲,在搭建交叉编译环境时需要考虑不同体系架构的不同特性,包括 CPU 架构是 64 位还是 32 位系统、字节序是⼤端( big-endian )或⼩端( little-endian )、内存字节对齐⽅式等,不过好在 RISC-V 已经有完善的⼯具链,包含交叉编译所需的 binutils 、 gcc 和 glibc 3 个部分。
●⾸先需要 RISC-V 交叉编译⼯具链,如果⽹络较慢,可以忽略其中的 qemu ⼦项⽬git clone --recursive https:///riscv/riscv-gnu-toolchain这是 RISC-V 的 C/C++ 交叉编译⼯具链,其⽀持两种构建模式:1. 通⽤ ELF/Newlib ⼯具链2. Linux-ELF/glibc ⼯具链●安装所需依赖包sudo apt-get install -y autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev libncurses-dev device-tree-compiler libssl-dev gdisk swig ●接下来开始编译cd riscv-gnu-toolchain./configure --prefix=/opt/riscv(路径可以根据个⼈习惯⾃定义)sudo make linux -j `nproc`编译完成后,刚才指定的路径 opt/riscv/bin 下会⽣成以下⽂件:可以将这个路径添加到环境变量中:export PATH=/opt/riscv/bin:$PATH也可以添加到:echo "export PATH=/opt/riscv/bin:$PATH" >> ~/.bashrc到这⾥我们就完成了交叉编译所需环境的搭建。
ubuntu下搭建MIPS交叉编译环境

ubuntu下搭建MIPS交叉编译环境 由于要在本地编译程序,在嵌⼊式系统上运⾏,因此需要在本地装编译器,⽬前主要需要mipsel-linux-gcc。
之前⼀直以为可以⽤apt-get install找到,结果找了好久找不到,发现还是得⾃⼰编。
主要是参考上⾯的那个链接,然后这对⾃⼰需求改了改配置。
1. 环境系统:Ubuntu 16.04软件: buildroot该软件可以编译⽤于 mips, arm等等的C编译器。
2. 下载tar -jxvfcd buildroot3. 配置buildroot (重要)make cleanmake menuconfig会出现选择菜单,如下图:选择第⼀项“Target Architecture”, 改成 MIPS (little endian)另外,选择“Toolchain”, 将"kernel headers"改成⾃⼰主机上的Linux版本(及运⾏改编译器的主机)可以在主机上通过 uname -r 或者 cat /proc/version查看。
原⽣的是只有gcc部分,没有g++部分,需要对编译C++程序,则在菜单⾥选择 Enable c++选项(按 y 选取)。
⽤于编译python的配置选项我主要⽤这个来编译python放在嵌⼊式设备系统上⽤,最开始就按照上⾯的选项,编译⼀般的程序没问题,编译python会出现:unknow type name 'wchar_t' 错误,这个需要在这⾥的⼯具⾥选⼏个选项;a1. 在配置⾥选择对wchar的⽀持;a2. 退出Target options,进⼊Target packages,在Target packages⾥再添加⼏个选项(这⾥我没看不配置这个会出什么问题,这个⾥⾯到底做什么的,我直接按照进⼊Interpreter lanaguages and scripting 选项,选择python选项,然后吧core python modules⾥的都选了吧~(编译⼀次太费时了,缺个什么⼜得重新编译这个⼯具链)配置完了后,保存,并退出。
使用cmake-gui交叉编译

使用cmake-gui交叉编译CMake是一个跨平台跨编译器的编译工具,它可以简化编译和构建过程。
CMake-GUI是一个基于图形界面的版本,它可以更直观地配置和构建项目。
下面是使用CMake-GUI进行交叉编译的步骤:1. 准备交叉编译环境。
为目标平台准备好交叉编译器,并安装好必要的依赖库,同时建议将交叉编译器路径添加到环境变量中。
2. 安装CMake-GUI。
在Windows下,CMake-GUI可以通过官方网站免费下载并安装。
在Linux下,可以通过包管理器安装,如Ubuntu下通过以下命令安装:```bashsudo apt-get install cmake-qt-gui```3. 创建工程目录。
在交叉编译环境中,创建一个新的项目目录。
使用CMake-GUI时,建议将源代码和构建目录分开存放,创建一个名为"build"的目录作为构建目录。
4. 配置项目。
双击运行CMake-GUI,并打开刚刚创建的工程目录。
在源代码目录和构建目录中分别选择所需的路径。
接着点击"Configure"按钮,选择交叉编译器平台,选择平台后,点击“Finish”按钮开始生成。
在点击"Configure"按钮前,需要注意:- 交叉编译器的路径在Windows和Linux下是不一样的,需要根据实际情况修改;- 如果需要添加自定义的编译选项,可以在"CMakeLists.txt"文件中添加。
5. 构建项目。
在CMake-GUI界面中,设置好编译选项,如编译类型、编译优化级别等。
然后点击"Generate"按钮,开始构建项目。
如果构建成功,我们可以在构建目录中看到生成的二进制可执行文件。
至此,我们使用CMake-GUI完成了交叉编译操作。
需要注意的是,交叉编译的过程可能因环境、依赖库等多种因素出现问题,需要根据具体情况进行调整。
[转]qt-4.7交叉编译-mikit的专栏-CSDN博客
![[转]qt-4.7交叉编译-mikit的专栏-CSDN博客](https://img.taocdn.com/s3/m/53c5022a77c66137ee06eff9aef8941ea76e4b0d.png)
[转]qt-4.7交叉编译-mikit的专栏-CSDN博客[转]qt-4.7交叉编译收藏一:环境介绍虚拟机:vmware 7.0Linux 环境:ubuntu 9.04交叉编译环境:arm-linux-g++ 3.4.5硬件平台:TQ2440二:移植步骤安装交叉编译环境由于这里使用的是QT2440管盘中提供的交叉编译工具链EABI-4.3.3_EmbedSky_20100610.tar.bz2,放在/opt/目录下解压主要是在解压后可以看到其中含有两个版本,由于qt4.7.0的编译必须使用3.4.5版本所以在设置交叉编译的路径的时候使用的是在/etc/profile中加入exportPATH=/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin:$PATH安装tslib1.41. 下载tslib1.4,解压2. 进入解压的目录运行执行./autogen.sh3. 执行./configure --prefix=/opt/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes ,经过一段时间的编译4. 执行make install5. 修改/opt/tslib/etc/ts.conf,把第二行的#号去掉(这样做的主要目的是为了在移植到板子上的时候,可以制定输入模块)6. 在/etc/profile中加入export PATH=/opt/tslib:$PATHPS:经过我的测试,我无法用以上的方法编译tslib1.4,我用的是另外一种方法:1、 ./autogen.sh #用于生成configure脚本2、 echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache#产生一个cache文件arm-linux.cache,欺骗configure,3、 CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/opt/tslib --cache-file=arm-linux.cache4、 make5、 make install交叉成功后在目标位置产生/bin、/etc、/include、/lib 4个文件夹编译qt4.7.0-arm1. 下载qt-everwhere-opensource-4.7.0,并解压最好重命名qt-everwhere-opensource-4.7.0-qte2. 开始进行配置选项./configure -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libmng -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I /opt/tslib/include -L /opt/tslib/lib -confirm-license "$@"3. 开始进行交叉编译gmake 此过程要经历很长的一段时间4. 在交叉编译成功后运行gmake install安装,这里会默认安装到/usr/local/Trolltech/QtEmbedded-4.7.0-arm5. 这个时候qte的编译就成功了制作根文件系统(移植到开发板)1.移植tslib,将ubuntu中的/opt/tslib 拷贝到根文件系统中的/opt/下面2.移植qte4.7.0将/usr/local/Trolltech/QtEmbedded-4.7.0-arm下面的lib文件夹拷贝到根文件中的相同目录下(必需得先创建相应的目录)注:此时可以根据需要裁剪lib 中的内容去掉不用的.so文件3. 增加新的显示中文的字体wenquanyi 放到上面的/lib/fonts目录下。
qnx 交叉编译

qnx 交叉编译
QNX是一种实时操作系统,常常被用于开发嵌入式系统和工业控制设备。
要进行QNX交叉编译,可以按照以下步骤进行:
1.安装交叉编译环境:首先,需要在本地的机器上安装交叉编译环境。
这个环境通常
包括编译器、链接器和其他一些必要的工具。
2.配置目标系统:你需要配置目标系统,也就是你希望运行的设备。
这通常涉及到指
定设备的处理器架构、内存大小等参数。
3.创建交叉编译工具链:基于目标系统的配置,你可以创建一个交叉编译工具链。
这
个工具链包括一些特定的编译器、链接器和其他工具,它们都是针对目标系统的架构进行优化的。
4.编写代码并交叉编译:使用交叉编译工具链,你可以将你的源代码编译成目标系统
可以执行的二进制文件。
5.部署和测试:最后,你需要将编译后的二进制文件部署到目标系统上,并进行测试
以确保一切正常工作。
具体操作中,你需要根据你的设备和项目需求进行一些相应的调整和配置。
注意,由于QNX 的版本和具体硬件设备可能会影响交叉编译的过程,所以建议在实际操作前仔细阅读相关的文档和教程。
建立交叉编译环境

交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。
交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。
[root@localhost /]#tar xjvf arm-linux-gcc-3.4.1.tar.bz2
设置系统环境变量:
[root@localhost arm]#export PATH=$PATH:/usr/local/arm/3.4.1/bin
这样,内核或其他应用程序均可以用arm-linux-来指定使用该交叉编译器。
自行编写一个程序测试:
示例helloworld.c:
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
然后在命令行执行:
$arm-linux-gcc helloworld.c -o helloworld
$file helloworld
如果输出以下信息,说明编译成功。
helloworld: ELF 32-bit LSB executeable, ARM, version 1, dynamically linked (uses shared libs), not stripped
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.1.4 交叉调试
嵌入式系统的特点:
调试器和被调试进程运行在不同的机器上 调试器通过某种通信方式与被调试进程建立联系,如串口、并口、 网络、DBM、JTAG或者专用的通信方式。 在目标机上一般会具备某种形式的调试代理,它负责与调试器共同 配合完成对目标机上运行着的进程的调试。 目标机可能是某种形式的系统仿真器
交叉开发简介
交叉开发环境的组成要素 交叉编译与链接
交叉调试
交叉编译环境建立
开源GNU交叉开发环境
arm-linux-gcc是交叉 编译器 arm-linux-ld是 交叉链接器。
交叉工具链展开 常用工具介绍 主要工具使用
GNU交叉工具链
实验
任务1:交叉开发环境的建立
任务2:交叉开发工具的使用
任务1 注意事项
10.1.1 为什么需要交叉开发
交叉开发环境
10.1.2 交叉开发环境的组成要素
宿主机 目标机 交叉工具
一个编译器,它是编译器工具链前端的一部分。 一个 汇编器,它是编译器工具链后端的一部分。 一个 链接器,它是编译器工具链后端的另一部分。 用于处理可执行程序和库的一些基本工具,比如strings。
第十章
交叉编译环境
本章目标
嵌入式系统的开发环境是什么; 能够熟练使用掌握交叉编译环境建立的方法; 如何进行交叉编译。
本章结构
为什么需要交叉开发 交叉开发简介
交叉开发环境的组成要素 交叉编译与链接
交叉调试
交叉编译环境建立
开源GNU交叉开发环境 交叉工具链展开 常用工具介绍 主要工具使用
GNU交叉工具链
10.1.3 交叉编译与链接
交叉编译器和交叉链接器是能够在宿主机上运行,并 且能够生成在目标机上直接运行的二进制代码的编译 器和链接器 例如在基于ARM体系结构的gcc交叉开发环境中
arm-linux-gcc是交叉编译器 arm-linux-ld是交叉链接器。
10.1.4 交叉调试
交叉调试(Cross Debug)又常常被称为远程调试( Remote Debug),是一种允许调试器以某种方式控制 目标机上被调试进程的运行方式,并具有查看和修改 目标机上内存单元、寄存器以及被调试进程中变量值 等各种调试功能的调试方式。
10.2 开源GNU交叉开发环境
GNU目前已经推出的软件主要由Emacs──功能强大 的编辑环境,GCC──性能优异的多平台的C,C++, Fortran编译器和其他40多种软件。 其中GCC的成功为GNU带来了前所未有的影响。 GCC是一种可以在11种硬件平台上编译出可执行程序 的超级编译器,而且其执行效率更是惊人,与一般的 编译器相比平均效率要高20%-30%。
执行命令, 将把arm-linux-gcc( 版本2.95.3 和3.4.1) 分别安装 到/usr/loca/arm/2.95.3 和/usr/loca/arm/3.4.1 目录
10.3.2 常用工具介绍
名称 arm-linux-as arm-linux-ar arm-linuxran-lib arm-linux-ld arm-linuxobjdump inux-readelf arm-linux-gcc arm-linux-g++ 归属 binutils binutils binutils binutils binutils binutils binutils binutils gcc gcc 作用 编译ARM汇编程序 把多个.o合并成一个.o或静态库(.a) 为库文件建立索引,相当于arm-linux-ar-s 连接器(Linker), 把多个.o或库文件连接成一个可执行 文件 查看目标文件(.o)和库(.a)的信息 转换可执行文件的格式 去掉elf可执行文件的信息. 使可执行文件变小 读elf可执行文件的信息 编译.c或.S开头的C程序或汇编程序 编译c++程序
10.3.1 交叉工具链展开
arm-linux-gcc-2.95.3.tgz 2.95.3版本的arm gcc交叉编译工具,一般我们使用它编译 linux2.4.x版本的内核源码; 安装 #tar xvfz arm-linux-gcc-2.95.3.tgz –C / arm-linux-gcc-3.4.1.tgz 3.4.1版本的arm gcc交叉编译工具,一般我们使用它编译 linux2.6.x版本的内核源码; #tar xvfz arm-linux-gcc-3.4.1.tgz –C /
10.3.3 主要工具使用
arm-linux-gcc
arm-linux-ar
arm-linux-ranlib
arm-linux-objdump
arm-linux-readelf arm-linux-strip arm-linux-copydump
本章总结
交叉编译环境中包括 宿主,目标机的角色
为什么需要交叉开发
提示1:
注意交叉工具链建立在哪个目录
任务2 注意事项
提示1:
注意交叉工具使用的命令参数
任务1 注意事项
提示1:
注意配置文件加载 确定交叉编译工具已经建立
任务2 注意事项
提示1:
NFS服务设置中防火墙是否关闭。
任务3 注意事项
提示1:
文件系统内容的获取方式。
10.3 GNU交叉工具链
构建交叉编译工具链方法
方法一 分步编译和安装交叉编译工具链所需要的库和源代码 ,最终生成交叉编译工具链。 方法二 通过Crosstool脚本工具来实现一次编译生成交叉编译 工具链 方法三 直接通过网上()下载已经制作 好的交叉编译工具链。
10.1.1 为什么需要交叉开发
台式软件从“源码程序”到“机器码文件”的过程:
10.1.1 为什么需要交叉开发
嵌入式软件从“源码程序”到“机器码文件”的过程 :
10.1.1 为什么需要交叉开发
需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个 显著特点 交叉开发环境是指编译、链接和调试嵌入式应用软件 的环境 它与运行嵌入式应用软件的环境有所不同,通常采用 宿主机/目标机模式。