第一:动态库和静态库的生成:

1) 新建一个生成dll工程:

  文件->新建->项目->Win32->Win32控制台应用程序

  输入项目名称:dllTest ,项目路径:D:\VC

  确定

  下一步

  应用程序类型:选择DLL

  完成

2) 编写代码:

2-1) 增加一个头文件:dllTest.h

#define ICILIB_UTIL_API __declspec(dllexport)  //生成动态库时,同时在Debug或Release目录下生成.lib和.dll文件.

class ICILIB_UTIL_API CdllTest  //如果把#define ICILIB_UTIL_API __declspec(dllexport)屏蔽掉.把ICILIB_UTIL_API去掉,编译只会生成.dll而没有.lib文件.
{
public:
 CdllTest();
 ~CdllTest();
public:
 int sum(int a,int b);
};

2-2) dllTest.cpp文件里添加内容:

// dllTest.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "dllTest.h"

CdllTest::CdllTest()
{

}

CdllTest::~CdllTest()
{

}

int CdllTest::sum(int a, int b)
{
 return (a+b);
}

3) 设置生成dll动态库:

  项目->属性->配置属性->常规->配置类型->动态库(.dll)

4) 编译,重新生成(编译信息如下):

1>------ 已启动全部重新生成: 项目: dllTest, 配置: Debug Win32 ------
1>正在删除项目“dllTest”(配置“Debug|Win32”)的中间文件和输出文件
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>dllTest.cpp
1>正在编译...
1>dllmain.cpp
1>正在创建库...
1>生成日志保存在“file://d:\VC\dllTest\dllTest\Debug\BuildLog.htm”
1>dllTest - 0 个错误,0 个警告
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

  这样,就会在D:\VC\dllTest\Debug目录下生成dllTest.lib和dllTest.dll了.

其它) 另:编译静态库时.只需把第3)步改成:项目->属性->配置属性->常规->配置类型->静态库(.lib) 后,重新编译一下就OK了.

  这样,就会在D:\VC\dllTest\Debug目录下生成dllTest.lib(注意.这个.lib与前面动态库的.dll不一样,前者含内容和符号,后者只是符号表明内容在哪里)了.

第二:动态库和静态库的加载:

1) 新建一个测试dll或lib的工程:

  文件->新建->项目->Win32->Win32控制台应用程序

  输入项目名称:dllTest Main,项目路径:D:\VC

  确定

  下一步

  应用程序类型:选择控制台应用程序

  完成

2) 编写代码:

// dllTestMain.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include "../../dllTest/dllTest/dllTest.h" // linux 上用"/",而windows上可用"/"或"\" .

int _tmain(int argc, _TCHAR* argv[])
{
 int c = 0;
 CdllTest t;

c = t.sum(3,2);
 printf("c = %d\n",c);
 return 0;
}

3) 设置生成dll动态库:

  项目->属性->配置属性->链接器->输入->附加依赖项->../../dllTest/Debug/dllTest.lib

  这个lib无论是静态还是动态都是这样加进来.

1>------ 已启动全部重新生成: 项目: dllTestMain, 配置: Debug Win32 ------
1>正在删除项目“dllTestMain”(配置“Debug|Win32”)的中间文件和输出文件
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>dllTestMain.cpp
1>正在编译资源清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>正在链接...
1>LINK : 没有找到 D:\VC\dllTestMain\Debug\dllTestMain.exe 或上一个增量链接没有生成它;正在执行完全链接
1>   正在创建库 D:\VC\dllTestMain\Debug\dllTestMain.lib 和对象 D:\VC\dllTestMain\Debug\dllTestMain.exp
1>正在嵌入清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>生成日志保存在“file://d:\VC\dllTestMain\dllTestMain\Debug\BuildLog.htm”
1>dllTestMain - 0 个错误,0 个警告
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

5)用cmd程序 运行:

5-1) 动态库时:

  会弹出"没有找到 dllTest.dll,因此这个应用程序未能启动.重新安装应用程序可能修复此问题"的对话框.

  是因为没有找到动态库.需要把刚才生成的dllTest.dll放到dllTestMain.exe同一个目录下.再运行.发现运行成功.

5-2) 静态库时:

  运行成功

VS2008 动态库和静态库的生成和加载的更多相关文章

  1. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  2. 如何使用GCC生成动态库和静态库

    根据链接时期的不同,库又有静态库和动态库之分.静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行.而动态库是在程序执行的时候被链接的.程序执行完,库仍需 ...

  3. Linux下动态库和静态库的生成和使用

    1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...

  4. 【C++】如何使用GCC生成动态库和静态库

    一.静态库和动态库的定义及区别 程序编译的四个过程: 1.预处理  展开头文件/宏替换/去掉注释/条件编译(.i后缀) 2.编译    检查语法,生成汇编(.s后缀) 3.汇编    汇编代码转换成机 ...

  5. gcc编译工具生成动态库和静态库

    一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...

  6. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  7. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  8. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  9. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

随机推荐

  1. Ajax简单应用-购物车

    1. 2. 3. 4. 5. 6.

  2. HTTP,TCP,Socket

    TCP/IP三次握手和HTTP过程   1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络 ...

  3. NSString&NSMutableString常用操作梳理(转)

    作者:弦苦 授权本站转载. 上一篇梳理了NSArray&NSMutableArray常用操作,这次来梳理一下Objective-C中每天都要用到的字符串处理类——NSString. Objec ...

  4. Swift - 19 - 字典的初始化

    //: Playground - noun: a place where people can play import UIKit // 注意: swift中的字典用的也是中括号, 和OC的大括号是不 ...

  5. 自由创造属于你的H5内容

    在这里,你可以自由创造属于你的H5内容  mark下 http://www.ih5.cn/

  6. 利用iframe实现提交表单是页面部分刷新

    直接上代码: <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...

  7. PHP Countable接口

    实现该接口可以使用count()方法来获取集合的总数

  8. 再谈CMake与RPATH

    之前写过一篇<探讨CMake中关于RPATH的使用>,只要针对的方面是在编译生成之后(不包括安装的make install)如何去除RPATH的问题.今天给大家主要介绍一下如何让CMake ...

  9. MYSQL管理之主从同步管理 转载

    MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...

  10. 个人Python常用Package及其安装

    为了避免每次重装系统时又要东翻西找,现在此记录一下目前常用的Python包安装过程. 1) Python: 2.7.11, 下载地址:www.python.org.由于个人喜欢使用PyQt4(其实是不 ...