VS2008 动态库和静态库的生成和加载
第一:动态库和静态库的生成:
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 动态库和静态库的生成和加载的更多相关文章
- gcc编译工具生成动态库和静态库之一----介绍
1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...
- 如何使用GCC生成动态库和静态库
根据链接时期的不同,库又有静态库和动态库之分.静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行.而动态库是在程序执行的时候被链接的.程序执行完,库仍需 ...
- Linux下动态库和静态库的生成和使用
1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...
- 【C++】如何使用GCC生成动态库和静态库
一.静态库和动态库的定义及区别 程序编译的四个过程: 1.预处理 展开头文件/宏替换/去掉注释/条件编译(.i后缀) 2.编译 检查语法,生成汇编(.s后缀) 3.汇编 汇编代码转换成机 ...
- gcc编译工具生成动态库和静态库
一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- Linux系统中“动态库”和“静态库”那点事儿【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...
随机推荐
- Ajax简单应用-购物车
1. 2. 3. 4. 5. 6.
- HTTP,TCP,Socket
TCP/IP三次握手和HTTP过程 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络 ...
- NSString&NSMutableString常用操作梳理(转)
作者:弦苦 授权本站转载. 上一篇梳理了NSArray&NSMutableArray常用操作,这次来梳理一下Objective-C中每天都要用到的字符串处理类——NSString. Objec ...
- Swift - 19 - 字典的初始化
//: Playground - noun: a place where people can play import UIKit // 注意: swift中的字典用的也是中括号, 和OC的大括号是不 ...
- 自由创造属于你的H5内容
在这里,你可以自由创造属于你的H5内容 mark下 http://www.ih5.cn/
- 利用iframe实现提交表单是页面部分刷新
直接上代码: <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...
- PHP Countable接口
实现该接口可以使用count()方法来获取集合的总数
- 再谈CMake与RPATH
之前写过一篇<探讨CMake中关于RPATH的使用>,只要针对的方面是在编译生成之后(不包括安装的make install)如何去除RPATH的问题.今天给大家主要介绍一下如何让CMake ...
- MYSQL管理之主从同步管理 转载
MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...
- 个人Python常用Package及其安装
为了避免每次重装系统时又要东翻西找,现在此记录一下目前常用的Python包安装过程. 1) Python: 2.7.11, 下载地址:www.python.org.由于个人喜欢使用PyQt4(其实是不 ...