参考答案和解析
正确答案: 所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。。之所以采用交叉编译,是因为目标平台上不具备直接运行开发环境的条件。
解析: 暂无解析
更多“什么是交叉编译?为什么要采用交叉编译。”相关问题
  • 第1题:

    嵌入式软件的交叉开发环境一般包括公式编辑器,交叉编译器,交叉调试器等。()


    正确答案:错

  • 第2题:

    在C++ 程序中调用被C 编译器编译后的函数,

    为什么要加extern “C”?


    正确答案:

     

    首先,作为extern是C/C++语言中表明函数和全局
    变量作用范围(可见性)的关键字,该关键字告诉
    编译器,其声明的函数和变量可以在本模块或其它
    模块中使用。
    通常,在模块的头文件中对本模块提供给其它模块
    引用的函数和全局变量以关键字extern声明。例如,
    如果模块B 欲引用该模块A 中定义的全局变量和
    函数时只需包含模块A的头文件即可。这样,模块
    B中调用模块A中的函数时,在编译阶段,模块B
    虽然找不到该函数,但是并不会报错;它会在连接
    阶段中从模块A 编译生成的目标代码中找到此函

    extern "C"是连接申明(linkage declaration),被extern
    "C"修饰的变量和函数是按照C 语言方式编译和连
    接的,来看看C++中对类似C的函数是怎样编译的:
    作为一种面向对象的语言,C++支持函数重载,而
    过程式语言C则不支持。函数被C++编译后在符号
    库中的名字与C语言的不同。例如,假设某个函数
    的原型为:
    void foo( int x, int y );
    该函数被C 编译器编译后在符号库中的名字为
    _foo,而C++编译器则会产生像_foo_int_int之类的
    名字(不同的编译器可能生成的名字不同,但是都
    采用了相同的机制,生成的新名字称为“mangled
    name”)。
    _foo_int_int这样的名字包含了函数名、函数参数数
    量及类型信息,C++就是靠这种机制来实现函数重
    载的。例如,在C++中,函数void foo( int x, int y )
    与void foo( int x, float y )编译生成的符号是不相同
    的,后者为_foo_int_float。
    同样地,C++中的变量除支持局部变量外,还支持
    类成员变量和全局变量。用户所编写程序的类成员
    变量可能与全局变量同名,我们以"."来区分。而本
    质上,编译器在进行编译时,与函数的处理相似,
    也为类中的变量取了一个独一无二的名字,这个名
    字与用户程序中同名的全局变量名字不同。
    未加extern "C"声明时的连接方式
    假设在C++中,模块A的头文件如下:
    // 模块A头文件moduleA.h
    #ifndefMODULE_A_H
    #define MODULE_A_H
    int foo( int x, int y );
    #endif
    在模块B中引用该函数:
    // 模块B实现文件moduleB.cpp
    #i nclude "moduleA.h"
    foo(2,3);
    实际上,在连接阶段,连接器会从模块A生成的目
    标文件moduleA.obj 中寻找_foo_int_int 这样的符
    号!
    加extern "C"声明后的编译和连接方式
    加extern "C"声明后,模块A的头文件变为:
    // 模块A头文件moduleA.h
    #ifndefMODULE_A_H
    #define MODULE_A_H
    extern "C" int foo( int x, int y );
    #endif
    在模块B的实现文件中仍然调用foo( 2,3 ),其结果
    是:
    (1)模块A 编译生成foo 的目标代码时,没有对
    其名字进行特殊处理,采用了C语言的方式;
    (2)连接器在为模块B 的目标代码寻找foo(2,3)
    调用时,寻找的是未经修改的符号名_foo。
    如果在模块A中函数声明了foo为extern "C"类型,
    而模块B中包含的是extern int foo( int x, int y ) ,
    则模块B找不到模块A中的函数;反之亦然。
    所以,可以用一句话概括extern “C”这个声明的真
    实目的(任何语言中的任何语法特性的诞生都不是
    随意而为的,来源于真实世界的需求驱动。我们在
    思考问题时,不能只停留在这个语言是怎么做的,
    还要问一问它为什么要这么做,动机是什么,这样
    我们可以更深入地理解许多问题):实现C++与C
    及其它语言的混合编程。
    明白了C++中extern "C"的设立动机,我们下面来
    具体分析extern "C"通常的使用技巧:
    extern "C"的惯用法
    (1)在C++中引用C 语言中的函数和变量,在包
    含C语言头文件(假设为cExample.h)时,需进行
    下列处理:
    extern "C"
    {
    #i nclude "cExample.h"
    }
    而在C语言的头文件中,对其外部函数只能指定为
    extern类型,C语言中不支持extern "C"声明,在.c
    文件中包含了extern "C"时会出现编译语法错误。
    C++引用C函数例子工程中包含的三个文件的源代
    码如下:
    /* c语言头文件:cExample.h */
    #ifndef C_EXAMPLE_H
    #define C_EXAMPLE_H
    extern int add(int x,int y);
    #endif
    /* c语言实现文件:cExample.c */
    #i nclude "cExample.h"
    int add( int x, int y )
    {
    return x + y;
    }
    // c++实现文件,调用add:cppFile.cpp
    extern "C"
    {
    #i nclude "cExample.h"
    }
    int main(int argc, char* argv[])
    {
    add(2,3);
    return 0;
    }
    如果C++调用一个C 语言编写的.DLL 时,当包
    括.DLL 的头文件或声明接口函数时,应加extern
    "C" { }。
    (2)在C中引用C++语言中的函数和变量时,C++
    的头文件需添加extern "C",但是在C语言中不能
    直接引用声明了extern "C"的该头文件,应该仅将C
    文件中将C++中定义的extern "C"函数声明为
    extern类型。
    C引用C++函数例子工程中包含的三个文件的源代
    码如下:
    //C++头文件cppExample.h
    #ifndef CPP_EXAMPLE_H
    #define CPP_EXAMPLE_H
    extern "C" int add( int x, int y );
    #endif
    //C++实现文件cppExample.cpp
    #i nclude "cppExample.h"
    int add( int x, int y )
    {
    return x + y;
    }
    /* C实现文件cFile.c
    /* 这样会编译出错:#i nclude "cExample.h" */
    extern int add( int x, int y );
    int main( int argc, char* argv[] )
    {
    add( 2, 3 );
    return 0;
    }

  • 第3题:

    将计算机中可执行的程序转换为高级语言程序的过程称为( )。

    A.反编译 B.交叉编译 C.反汇编 D.解释


    正确答案:A

  • 第4题:

    嵌入式系统软件的开发通常采用()

    • A、与PC应用软件开发一样的方式
    • B、交叉编译与开发的方式
    • C、本地环境开发的方式
    • D、交叉编译与开发和本地环境开发两种方式都可以

    正确答案:B

  • 第5题:

    交叉渡线为什么要换位?什么情况下交叉渡线不换位?


    正确答案: 对交叉渡线的道岔区段为了能将Q组合设在关键部位,所以必须换位。当两组双动道岔的定位间设有钢轨绝缘时交叉渡线不换位。

  • 第6题:

    通用系统程序开发不需要建立和使用交叉编译环境。


    正确答案:正确

  • 第7题:

    有关Linux内核裁剪下列说法错误的是()

    • A、可以使用makemenuconfig命令进行内核的配置
    • B、所有的配置项都可以按以编译入内核,编译成模块,不编译三种方式配置
    • C、使用makezImage命令会编译生成内核镜像文件zImage
    • D、嵌入式Linux内核编译时应该采用交叉编译器

    正确答案:B

  • 第8题:

    为什么高速公路同其他各级公路交叉,必须采用立体交叉?


    正确答案:高速公路必须采用全封闭,不允许有平面交叉。

  • 第9题:

    轨道电路为什么要实现交叉?


    正确答案:钢轨绝缘两侧若为直流轨道电路时,配置成极性相反,若为交流轨道电路时配置成相位相反。即钢轨绝缘的两侧送电配置成不同极性或不同相位的电源。

  • 第10题:

    问答题
    什么是交叉编译?为什么要采用交叉编译。

    正确答案: 所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。。之所以采用交叉编译,是因为目标平台上不具备直接运行开发环境的条件。
    解析: 暂无解析

  • 第11题:

    问答题
    为什么要采用交叉口主路优先的控制方式?

    正确答案: 之所以要采用交叉口主路优先的控制方式,是基于如下背景的:
    全无控制交叉口的延误是较小的,即使流量增加,延误增加也有限。但鉴于安全性考虑,使得全无控制交叉口在低流量时就要求加以管制,有无控制立刻变成信号灯控制,交叉口延误将明显增加。较好的措施是在这两种控制方式之间,考虑一种过渡形式的控制,若能采取某种交通标志的控制措施并有效实施之,则既能解决安全问题,又不会导致太多不必要延误的增加,将是比较理想的,交叉口主路优先-控制就能很好的满足这种要求。
    解析: 暂无解析

  • 第12题:

    问答题
    为什么要进行频谱交叉?频谱交叉时有什么要求?

    正确答案: 将色度信号与亮度信号共用一个通道(或带宽)。
    亮度互不干扰措施:错开主频1/2行间制(NTSC制)
    解析: 暂无解析

  • 第13题:

    交叉编译器是嵌入式软件开发必备的基础工具软件之一。目前比较流行的交叉编译器是GNU系列产品,它是一种开源软件。编译器生成代码正确与否严重影响机载设备的安全,因此,张工在方案中提出对本项目采用的交叉编译器开展可信技术研究。可信编译器包括两方面含义,其一是编译器自身的可信性,即必须保证整个编译操作的可信性,保证编译器在编译过程中不会给编译处理对象带来任何安全问题;其二是必须保证编译器编译所得程序可执行代码的可信,即编译器必须保证,通过其编译生成的程序代码是安全和可靠的。因此,张工提出在传统编译操作的基础上加入代码安全性加强机制、代码可信性验证机制和可执行代码保护机制。图3-2给出了可信编译系统的框架。

    请说明三种可信机制在传统编译操作步骤中的位置,并给出图3-2的(a)~(c)对应的可信机制名称。

    根据表3-1所示的信息流名称,给出图3-2中(d)~(h)对应的功能模块间的信息流编号。


    正确答案:
    解析:编译器作为重要的系统软件,其可信性对于整个计算机系统的可信具有重要意义。如果编译器不可信,则很难保证其他软件的可信性。软件的可信性很大程度上依赖于程序代码的可信性,影响软件可信性的主要因素包括来自软件内部的代码缺陷、代码错误、程序故障以及来自软件外部的病毒、恶意代码等。因此,从代码角度来保证软件的可信性是实现可信软件的重要途径之一。
    可信编译的目标就是从编译的角度保证软件的可信性,主要包括两方面含义,一方面,必须保证编译器自身是可信的。即必须保证整个编译操作的可信性,保证编译器在编译过程中不会给编译处理对象带来任何安全性问题,防止恶意攻击者通过修改编译器,在编译过程中对代码的原始语义进行篡改,影响程序代码本身的可信性;另一方面,必须保证编译器编译所得程序可执行代码是可信的,即编译器必须保证,通过其编译生成的程序代码是安全和可靠的。
    编译器白身的可信性主要是指其编译过程的正确性、安全性和可靠性。一般认为,通过形式化验证的系统具有较高的可信性,可将形式化方法用于编译器本身。通过在传统编译操作的基础上加入代码安全性加强机制、代码可信性验证机制及可执行代码保护机制等三种机制,来保证编译所产生代码的可信性。
    (1)代码安全性加强机制:该机制主要用于识别和处理程序中常见的一些安全漏洞。目前已提出许多针对程序常见安全漏洞的编译处理技术,具有代表性的如针刈缓冲区溢出攻击的StackGuard方法等。
    (2)代码可信性验证:该机制不可能解决所有的代码安全性问题。对于可信性要求较高的程序代码,必须通过形式化方法对其进行可信性验证。因此,我们提出在代码安全性加强机制对代码进行安全加强之后,通过代码可信性验证机制对代码的可信属性进行验证,对未通过验证的非可信代码进行报警或其他处理。这样,通过代码安全性加强和可信性验证相结合的方法保证编译生成可执行代码的可信性。
    (3)可执行代码保护机制:为了防止攻击者对可信编译器最终生成的可执行代码进行恶意攻击或修改,可信编译器在完成编译之后,对可执行代码实施保护机制,保护编译所得可执行代码的完整性、秘密性和可用性,从而确保系统最终执行代码的可信运行。

  • 第14题:

    在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?


    正确答案:
     

  • 第15题:

    交叉编译


    正确答案: 指用A机器上的编译程序来产生可在B机器上运行的目标代码。

  • 第16题:

    交叉编译环境的搭建中minicom是用于Linux下的()工具,DNW是用于串口下载()的工具。


    正确答案:串口通信;文件镜像

  • 第17题:

    过热器为什么要多次交叉换位?


    正确答案: 过热器系统的左右交叉换位,也称调换流动。即原来在左侧烟道的过热器,至下一级时用管道将蒸汽引至右侧烟道的过热器中去,原在右侧的引到左侧去。
    大容量锅炉的烟道都比较宽,尽管采取了各种措施,但烟道中间的烟温要比两侧的高,左右侧烟道的烟温也不完全一致,从而引起热偏差。所以在过热器系统中,除了进行分级混合外,还在混合的同时,把左右侧管组中的蒸汽进行交叉换位,以减小由于左右侧烟气温度不均匀所造成的热偏差。高参数大容量锅炉的过热器系统,一般要进行二到三次的左右交叉换位。

  • 第18题:

    如何测试交叉编译环境是否建立成功?


    正确答案: 首先,使用VI编辑器创建一个hello.c文件。
    [root@localhostxscale270]#vihello.c
    编写一个简单的程序来打印出一行简单的信息:WelcomeEmdoor!。
    保存并退出该文件。使用如下的命令来编译该文件。
    [root@localhostxscale270]#gcc-ohellohello.c
    [root@localhostxscale270]#arm-linux-gcc-ohellohello.c
    gcc编程生成的是X86系统结构的二进制文件。
    arm-linux-gcc是在在宿主机中,交叉编译hello.c源程序,并查看生成的.o目标文件。调用交叉编译器arm-linux-gcc编译hello.c文件
    使用file命令来分别查看编译出的二进制文件hello和hello-arm。
    [root@localhostxscale270]#filehello
    [root@localhostxscale270]#filehello-arm
    编译器arm-linux-gcc生成的可执行文件hello-arm文件是不能在宿主PC机上运行的,只能在XSBase270目标机上运行。

  • 第19题:

    交叉开发环境包括交叉编译环境和()。

    • A、交叉链接器  
    • B、交叉调试器  
    • C、交叉编辑器  
    • D、交叉生成器

    正确答案:A

  • 第20题:

    什么是交叉编译?为什么要采用交叉编译。


    正确答案: 所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。。之所以采用交叉编译,是因为目标平台上不具备直接运行开发环境的条件。

  • 第21题:

    单选题
    有关Linux内核裁剪下列说法错误的是()
    A

    可以使用makemenuconfig命令进行内核的配置

    B

    所有的配置项都可以按以编译入内核,编译成模块,不编译三种方式配置

    C

    使用makezImage命令会编译生成内核镜像文件zImage

    D

    嵌入式Linux内核编译时应该采用交叉编译器


    正确答案: B
    解析: 暂无解析

  • 第22题:

    单选题
    嵌入式系统软件的开发通常采用()
    A

    与PC应用软件开发一样的方式

    B

    交叉编译与开发的方式

    C

    本地环境开发的方式

    D

    交叉编译与开发和本地环境开发两种方式都可以


    正确答案: B
    解析: 暂无解析

  • 第23题:

    名词解释题
    交叉编译

    正确答案: 指用A机器上的编译程序来产生可在B机器上运行的目标代码。
    解析: 暂无解析

  • 第24题:

    填空题
    交叉编译环境的搭建中minicom是用于Linux下的()工具,DNW是用于串口下载()的工具。

    正确答案: 串口通信,文件镜像
    解析: 暂无解析