2017阿里巴巴实习生(移动客户端)在线笔试题

2017

阿里巴巴实习生(移动客户端)在线笔

试题

篇一:阿里巴巴2017实习生笔试题(二) 阿里巴巴2017实习生笔试题(二) 答案:B 动态链接库和静态链接库的区别

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。如果在当前工程中有多处对dll文件中同一个函数的调用,那么执行时,这个函数只会留下一份拷贝。但是如果有多处对lib文件中同一个函数的调用,那么执行时,该函数将在当前程序的执行空间里留下多份

2016全新精品资料-全新公文范文-全程指导写作 –独家原创

1 / 9

拷贝,而且是一处调用就产生一份拷贝。

静态链接库与静态链接库调用规则总体比较如下: 1、 静态链接库(比较简单):

首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的extern “C” 函数返回类型 函数名(参数表); 在调用程序的.cpp源代码文件中如下: #include “../”

#pragma comment(lib,”..//debug//”)//指定与静态库一起链接

//文件: 其次因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接静态链接库(Lib) 在VC++中new一个名称为libTest的static library工程,并新建和两个文件,//文件: #ifndef LIB_H #define LIB_H extern “C” int add(int x,int y);//声明为C编译、连接方式的外部函数 #endif 库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要! 声明格式如下: 和的源代码如下: #include ““ int add(int x,int y) { return x + y; } 编译这个工程就得到了一个.lib文件,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。

标准Turbo 中的C库函数(我们用来的scanf、printf、memcpy、strcpy等)就来自这种静态库。 下面来看看怎么使用这个库,在

2016全新精品资料-全新公文范文-全程指导写作 –独家原创

2 / 9

libTest工程所在的工作区内new一个libCall工程。libCall工程仅包含一个文件,它演示了静态链接库的调用方法,其源代码如下: #include #include “../”//不可丢失 #pragma comment( lib, “..//debug//” ) //指定与静态库一起连接 int main(int argc, char* argv) { printf( “2 + 3 = %d”, add( 2, 3 ) ); }

静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , “..//debug//” )的意思是指本文件生成的.obj文件应与一起连接 2、 态链接库: 动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。 首先我们必须先注意到DLL内的函数分为两种: 1) 外部函数,可供应用程序调用; 2) DLL内部函数,只能在 DLL 程序使用,应用程序无法调用它们。 因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。

动态库函数的调用,可以采用静态链接的方式,主要步骤如下: 1) 包含DLL中导出的头文件。

2) 采用#pragma comment(lib,”..//debug//”)导入动态库生成的*.lib头文件。或在projectàsettingsàLinkeràInput的Additional Dependencies中加入lib文件。

3) 将动态库生成的*.dll文件放到EXE或DLL的同一目录下。 也可以采用动态加载的方式调用,步骤如下:

2016全新精品资料-全新公文范文-全程指导写作 –独家原创

3 / 9

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4