.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。
.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码
如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么 dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。
一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:
extern "C"
{
#include "myheader.h"
}
这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。
===============================
在VC中不用MFC如何制作dll
方法一:使用export 和 import
在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp
Dll.h
#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" _declspec (dllimport)
#end if
MYLIBAPI int Add (int iLeft, int iRight)
MYLIBAPI int Sub (int iLeft, int iRight)
Dll.cpp
#define MYLIBAPI extern "C" _declspec (dllexport)
#include "Dll.h"
int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}
int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}
保存文件。
在Project->setting->link 最下面加上 “/dll”, "/"之前一定要与前一项
有空格。
然后编译,就可以在debug 或 release下面找到dll 和 lib 文件了
使用的时候包含dll.h文件
方法二:使用def文件
建立一个console application, 建立2个文件dll.h 和 dll.cpp
Dll.h
int Add (int iLeft, int iRight) ;
int Sub (int iLeft, int iRight) ;
Dll.cpp
#include "Dll.h"
int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}
int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}
然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名
为.def, 里面写上:
LIBRARY dllname.dll
EXPORTS
Add @1
Add @2
然后将这个文件添加到工程中,
在link中设置 /dll, 然后编译
在debug或release中就可以找到dll和lib了
使用的时候加上dll.h文件
相关推荐
详细介绍了静态链接库和动态链接库的创建和调用方法,其中动态链接库又分为加载时动态链接和运行时动态链接两种。附有程序进行说明~~
演示Qt静态链接库与动态链接库的创建与使用。环境:windows xp Qt4, MinGW编译器环境。供备忘和参考。
vc++如何创建和调用动态库核心提示:静态链接库:lib中的指令被直接包含在最终生成的EXE文件中。
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 对动态链接库,我们还需建立如下概念: (1)DLL 的...
中间件实例,动态链接库实例及调用实例,静态态链接库实例及调用实例,单接口COM组件,多接口COM组件,不同的创建实例及调用实例!
Windows编程 C++ DLL编程 学习笔记 (二)动态链接库的创建 动态调用 静态调用 本文件中只有程序,不含笔记和注释,笔记和注释请到空间察看http://giddyandyang.spaces.live.com/
MFC创建和使用动态链接库的样例代码。帮助新手学习。共同进步
MFC DLL规则库封装例程及其调用方法,包含静态调用和动态调用。
资源包括一个创建DLL的工程,一个使用DLL的工程,共俩个工程。...附带一个说明文档,分为静态(隐式)链接方式和动态(显式)链接方式详细介绍了DLL的创建以及使用方式。 简单明了,一学包会,不坑爹。
VC 动态链接库(DLL)编程 PDF,先简要介绍了静态链接库的基本概念及知识,然后介绍库的调试与查看、动态链接库的基本概念、MFC规则DLL的调用及创建、MFC扩展DLL的派生类以及DLL应用、DLL典型应用、木马防治、相关读者...
静态库是指编译后的一个文件,可以包含多个对象文件,它可以在其他项目中被链接和调用。在 Qt 中,可以使用 qmake 工具生成静态库。下面是一个生成静态库的示例: 1. 首先,创建一个目录 libStatic,并在该目录下...
MFC动态库分为规则动态库和扩展动态库,根据调用 方式的不同,对动态库的调用可分为静态调用方式和动态调用 方式。
用GCC编译器制作静态库和动态库的方法简介。
第一章:VC++动态链接库编程之基础慨念 1.1、概论 1.2、静态链接库 1.3、库的调试与查看 第二章:VC++动态链接库编程之非MFC DLL 2.1、一个简单的DLL 2.2、声明导出函数 2.3、DLL的调用方式 2.4、DllMain函数 2.5、_...
VC动态链接库(Dynamic Link Libraries)是一种在Windows系统平台上提供的一种编程和运行环境,可以将独立的程序模块创建为较小的DLL文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块...
VC++动态链接库(DLL)编程 PDF,先简要介绍了静态链接库的基本概念及知识,然后介绍库的调试与查看、动态链接库的基本概念、MFC规则DLL的调用及创建、MFC扩展DLL的派生类以及DLL应用、DLL典型应用、木马防治、相关...
2、动态链接库(.so): 动态库还分为两种用法: a) 应用程序运行期间链接动态库,但是在编译期间声明动态库的存在,也是说这种动态库必须在编译时对编译器可见,但编译器却不将此种库编译进可执行文件; b) 在运行...
VC++动态链接库(DLL)编程 PDF,先简要介绍了静态链接库的基本概念及知识,然后介绍库的调试与查看、动态链接库的基本概念、MFC规则DLL的调用及创建、MFC扩展DLL的派生类以及DLL应用、DLL典型应用、木马防治、相关...
因此,这里我将为大家介绍如何给其它开发者创建可供使用的静态库或动态库。而应用开发者如何去连接这些生成的静态库或动态库。由于现在Android Studio已经比较成熟,因此以下描述将基于Android Studio的目录布局。 ...
在使用赛普拉斯开发USB相机时,由于官网只提供了C++的静态库编译,虽然也有C#的动态库编译,但我还是想要调用C++的动态库,所以用官网提供的CyAPI_lib_cpp工程源码建立了一个动态链接库工程,其中还外加入了一个...