交叉编译器

       搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。

        交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。
       gcc和arm-linux-gcc的区别:gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。

        Hi35xx_SDK_Vx.x.x.x为Linux 海思arm(3515/3520D/3521/3535, 基于arm-hisiv100nptl-linux-编译链编译) 平台下NetSDK, 利用此SDK可以实现通过网络直接连接网络摄像机,获取其音视频流、解码、参数查询、设置,以及其他控制功能, 内含Demo程序源码, 用户可基于此SDK可在海思平台Linux系统下开发完整的视频监控客户端/服务器软件。

     例如,Hi3516A_SDK_V1.0.5.0,其对应的编译器为arm-hisiv300-linux-gcc。所以对其进行开发时,需要安装对应的编译器。

     之前对Hi3518_SDK_V1.0.9.0做过开发,其对应的编译器为arm-hisiv100nptl-linux-gcc。

     因为之前不懂linux,搞得很纠结。自己用VS编写了很简单的C程序:hello.c,即从屏幕显示“hello world!”。在linux上执行命令生成可执行文件hello:

    命令如下:cc(gcc)-c hello.o hello.c     //生成目标文件

                      cc -o hello hello.o          //生成可执行文件,自己命名为hello

                      ./hello           //在linux下执行这个可执行文件

     即可在linux屏幕显示“hello world!”。

     但是把这个可执行文件拷贝传输到arm平台上执行,./hello,会出现错误:line 1: syntax error: unexpected "("  ,代码就那么两行,肯定没有错误,所以是编译器的缘故,要在arm平台上执行出结果,必须使用其对应的编译器;然后使用对应的编译器进行生成可执行文件hello(此时arm对应的编译器是arm-hisiv100nptl-linux-gcc):

      命令如下:arm-hisiv100nptl-linux-gcc -c hello.o hello.c     //生成目标文件

                        arm-hisiv100nptl-linux-gcc -o hello hello.o          //生成可执行文件,自己命名为hello

                       ./hello           //在linux下执行这个可执行文件

      在linux屏幕不会显示“hello world!”,出现错误,bash: ./hello:cannot execute binary file。

      但是把这个可执行文件拷贝传输到arm平台上执行,./hello,可正确显示“hello world!”。


     现在在linux服务器上安装交叉编译器arm-hisiv300-linux-gcc
    1)安装uclibc交叉编译器:
       进入Hi3516A_SDK_Vx.x.x.x/osdrv/opensource/toolchain/arm-hisiv300-linux目录;

       输入:chmod +x cross.install(回车);

       输入:./cross.install(回车)。
    2) 使安装的交叉编译器的脚本配置的环境变量生效,两个方法:重新登陆或者执行source /etc/profile


你可能感兴趣的:(编译器,linux,交叉编译)