VC++动态链接库(DLL)编程之静态链接库

   对静态链接库的讲解不是本文的重点,但是在具体讲解DLL之前,通过一个静态链接库的例子可以快速地帮助我们建立“库”的概念。


  图1 建立一个静态链接库

  如图1,在VC++6.0中new一个名称为libTest的static library工程(单击此处下载本工程附件),并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下:

  //文件:lib.h

  #ifndef LIB_H

  #define LIB_H

  extern "C" int add(int x,int y);   //声明为C编译、连接方式的外部函数

  #endif

  //文件:lib.cpp

  #include "lib.h"

  int add(int x,int y)

  {

  return x + y;

  }

  编译这个工程就得到了一个.lib文件,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。

  标准Turbo C2.0中的C库函数(我们用来的scanf、printf、memcpy、strcpy等)就来自这种静态库。

  下面来看看怎么使用这个库,在libTest工程所在的工作区内new一个libCall工程。libCall工程仅包含一个main.cpp文件,它演示了静态链接库的调用方法,其源代码如下:

  #include

  #include "..lib.h"

  #pragma comment( lib, "..debuglibTest.lib" )  //指定与静态库一起连接

  int main(int argc, char* argv[])

  {

  printf( "2 + 3 = %d", add( 2, 3 ) );

  }  静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , "..debuglibTest.lib" )的意思是指本文件生成的.obj文件应与libTest.lib一起连接。

  如果不用#pragma comment指定,则可以直接在VC++中设置,如图2,依次选择tools、options、directories、library files菜单或选项,填入库文件路径。图2中加红圈的部分为我们添加的libTest.lib文件的路径。


  图2 在VC中设置库文件路径

  这个静态链接库的例子至少让我们明白了库函数是怎么回事,它们是哪来的。我们现在有下列模糊认识了:

  (1)库不是个怪物,编写库的程序和编写一般的程序区别不大,只是库不能单独执行;

  (2)库提供一些可以给别的程序调用的东东,别的程序要调用它必须以某种方式指明它要调用之。

时间: 2024-08-04 06:00:34

VC++动态链接库(DLL)编程之静态链接库的相关文章

VC++动态链接库(DLL)编程之库的调试与查看

  在具体进入各类DLL的详细阐述之前,有必要对库文件的调试与查看方法进行一下介绍,因为从下一节开始我们将面对大量的例子工程. 由于库文件不能单独执行,因而在按下F5(开始debug模式执行)或CTRL+F5(运行)执行时,其弹出如图3所示的对话框,要求用户输入可执行文件的路径来启动库函数的执行.这个时候我们输入要调用该库的EXE文件的路径就可以对库进行调试了,其调试技巧与一般应用工程的调试一样. 通常有比上述做法更好的调试途径,那就是将库工程和应用工程(调用库的工程)放置在同一VC工作区,只对

VC++动态链接库(DLL)编程深入浅出

  4.2 声明导出函数 DLL中导出函数的声明有两种方式:一种为4.1节例子中给出的在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出.属性及其他方面的信息. 下面的代码演示了怎样同.def文件将函数add声明为DLL导出函数(需在dllTest工程中添加lib.def文件): ; lib.def : 导出DLL函数 LIBRARY dllTest EXPORTS add

深入浅出Visual C++动态链接库(Dll)编程

文章作者:宋宝华信息来源:天极网 原始连接: http://soft.yesky.com/lesson/318/2166818.shtml?412 动态链接库(DLL)是Windows系统的核心,也是COM技术的基础,因此突破动态链接库一直是技术人员的攻坚目标,本期专题将由浅入深的介绍动态链接库的基础慨念.分类.实现和应用. 基础慨念 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数

动态链接库dll,静态链接库lib, 导入库lib

转载地址:http://www.cnblogs.com/chio/archive/2008/08/05/1261296.html   目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称"静态库"),另一种为动态连接库(DLL,以下简称"动态库")的导入库(Import Libary,以下简称"导入库"). 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一

VC程序在Win32环境下动态链接库(DLL)编程原理_C 语言

本文详细讲述了VC程序在Win32环境下动态链接库(DLL)编程原理.分享给大家供大家参考.具体分析如下: 一般比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用.在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费:另一个缺点是

VS2010下创建静态链接库和动态链接库

下面介绍一下用VS2010如何创建静态链接库和动态链接库,并测试创建的库. 1.静态链接库 打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选. 在这个空项目中,添加一个.h文件和一个.cpp文件.名字我们起为static.h和static.cpp static.h文件: [cpp] view plaincopy #ifndef LIB_H   #define LIB_H      extern "C" int sum(int a,

2014百度校招笔试题之动态链接库&静态链接库详解

1.什么是静态连接库,什么是动态链接库         静态链接库用通俗的话讲,静态库就是将代码编译到一个二进制文件下(通常扩展名为.LIB).然后客户端调用程序,只需要包含相关的.h文件及LIB库文件一起链接到exe文件中.可执行程序发布后,不再需要该.lib文件了. 动态链接库最终将编译出.lib与.dll文件. 注意.lib文件与上面的静态库虽然扩展名相同,但有本质的区别.动态库中的lib文件是动态库的引入库. 该引入库包含被DLL导出的函数和变量的"符号  名".而静态库中的.

dll lib-动态链接库和静态链接库

问题描述 动态链接库和静态链接库 谁知道如何将多个dll文件保存到lib文件中呢?比如add.dll和sub.dll保存到FuncSLibsBody.lib中?

Linux下C编程:关于静态链接库

在C语言的层面上,对代码的重复利用通常是通过库(library)的方式来实现的.传统意义上的库指的是以后缀.a结尾的文件.严格来讲,函数库应当分为两种:静态链接库和动态链接库,也称动态共享库.静态链接库通常是指以.a为后缀的文件,而动态链接库则常常以.so为后缀名. 静态链接库其实就是把一个或多个目标文件(即编译生成的.o文件)归档在一个文件中.此后,当需要使用这个静态库中的某个功能时,将这个静态库与要生成的应用程序链接在一起. 来讲讲ar工具~~~~ 在Linux上平台上最常用的归档工具是GN