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

下面介绍一下用VS2010如何创建静态链接库和动态链接库,并测试创建的库。

1.静态链接库

打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选。

在这个空项目中,添加一个.h文件和一个.cpp文件。名字我们起为static.h和static.cpp

static.h文件:

[cpp] view
plain
copy

  1. #ifndef LIB_H  
  2. #define LIB_H  
  3.   
  4. extern "C" int sum(int a,int b);  
  5.   
  6. #endif

static.cpp文件:

[cpp] view
plain
copy

  1. #include "static.h"  
  2.   
  3. int sum(int a,int b)  
  4. {  
  5.     return a+b;  
  6. }

编译这个项目之后,会在debug文件夹下生成static.lib文件,这个就是我们需要的静态链接库。

下面说明如何调用静态链接库。

首先需要新建一个空项目,起名为test。将之前static项目下的static.h和static.lib这个2个文件复制到test项目的目录下,并在工程中加入static.h文件。

新建一个test.cpp文件如下:

[cpp] view
plain
copy

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include "static.h"  
  4.   
  5. #pragma comment(lib,"static.lib")  
  6.   
  7. int main()  
  8. {  
  9.     printf("%d\n",sum(1,2));  
  10.     system("pause");  
  11.     return 0;  
  12. }

编译运行可得结果:3

#pragma comment(lib,"static.lib"),这一句是显式的导入静态链接库。除此之外,还有其他的方法,比如通过设置路径等等,这里不做介绍。

2.动态链接库

和创建静态链接库一样,需要创建一个空的win32项目,选择dll选项。创建dynamic.cpp和dynamic.h文件

dynamic.h文件:

[cpp] view
plain
copy

  1. #ifndef DYNAMIC  
  2. #define DYNAMIC  
  3.   
  4. extern "C" __declspec(dllexport)int sum(int a, int b);  
  5.   
  6. #endif DYNAMIC 

dynamic.cpp文件:

[cpp] view
plain
copy

  1. #include "dynamic.h"  
  2.   
  3. int sum(int a, int b)  
  4. {  
  5.     return a+b;  
  6. }

编译这个项目,会在debug文件夹下生成dynamic.dll文件。

下面介绍如何调用动态链接库,这里讲的是显式的调用。

在刚才的test项目下,把static.lib和static.h文件删除,把dynamic.h和dynamic.dll复制到该目录下,并在项目中添加dynamic.h文件,修改test.cpp文件为:

[cpp] view
plain
copy

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include<Windows.h>  
  4. #include "dynamic.h"  
  5. int main()  
  6. {  
  7.     HINSTANCE hDll=NULL;  
  8.     typedef int(*PSUM)(int a,int b);  
  9.     PSUM pSum;  
  10.     hDll = LoadLibrary(L"dynamic.dll");  
  11.     pSum = (PSUM)GetProcAddress(hDll,"sum");  
  12.     printf("%d\n",pSum(1,2));  
  13.     system("pause");  
  14.     FreeLibrary(hDll);  
  15.     return 0;  
  16. }

编译运行结果为:3

特别提示:

1.extern "C"中的C是大写,不是小写

2.如果从VS2010中直接运行程序,lib和dll需要放到test项目的目录下;如果想双击项目test下的debug文件中的exe文件直接运行的话,需把lib和dll放入debug文件夹下。

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

时间: 2025-01-20 12:04:50

VS2010下创建静态链接库和动态链接库的相关文章

深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题

注意:编译器为gcc,若使用g++,请在库里面加上extern "C"     两个静态库    首先测试静态链接库,大概的代码如下:    liba.c #include <stdio.h>  #include <stdlib.h>  #include "libA.h"  void libA() {          common();  }     void common()  {          printf("libA c

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

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

GCC 编译使用动态链接库和静态链接库的方法

1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用. 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库就直接嵌入可执行文件中了,这样就带来了两个问题. 首先就是系统空间被浪费了.

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

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

GCC 编译使用动态链接库和静态链接库

1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库

GCC 编译使用动态链接库和静态链接库的方法_C 语言

1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库

平台-关于windows下创建静态库和动态库的问题

问题描述 关于windows下创建静态库和动态库的问题 windows下的库是跨平台的吗,比如我用qt写了个动态库,可以再其他平台用吗 解决方案 Qt是跨平台的,可以在其他平台下使用. 解决方案二: 当然不是,dll只能在windows上用.但是不排除别的操作系统可以通过自身的模拟去兼容.linux下的wine连windows下的exe都能兼容. qt是跨平台的库,但是并不是二进制文件跨平台,而是相同的源代码用不同的编译器/链接器编译,实现的跨平台. 解决方案三: winfdows上的动态库,静

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

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

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(