先谢谢cppblog的各位指教.
链接到静态库(*.lib)很简单,不多说.链接到DLL动态库分隐式链接和显式链接,显式链接较复杂,请参考MSDN这里学习一下隐式链接.
为隐式链接到 DLL,可执行文件必须从 DLL 的提供程序获取下列各项:
- 包含导出函数和/或 C++ 类的声明的头文件(.H 文件)
- 要链接的导入库(.LIB files)。(生成 DLL 时链接器创建导入库。)
- 实际的 DLL(.DLL 文件)
隐式链接需要一个由动态连接库产生的.LIB文件(导入库),并把它链接到应用程序的工程中.该导入库仅包含加载DLL的代码和实现DLL函数调用的代码。在导入库中找到外部函数后,会通知链接器此函数的代码在DLL中。要解析对DLL的外部引用,链接器只需向可执行文件中添加信息,通知系统在进程启动时应在何处查找 DLL 代码。
系统启动包含动态链接引用的程序时,它使用程序的可执行文件中的信息定位所需的DLL。如果系统无法定位DLL,它将终止进程并显示一个对话框来报告错误。如果找到了DLL,系统将DLL模块映射到进程的地址空间中。与程序代码的其余部分一样,DLL代码在进程启动时映射到进程的地址空间中,且仅当需要时才加载到内存中。
Windows将遵循下面的搜索顺序来定位DLL
- 包含EXE文件的目录
- 进程的当前工作目录
- Windows系统目录(system/system32)。GetSystemDirectory 函数检索此目录的路径。
- Windows目录.GetWindowsDirectory 函数检索此目录的路径。
- 列在Path环境变量中的一系列目录
现在的问题是如何从DLL生成导入库.这需要用到LIB命令行实用程序(在目录Microsoft Visual Studio .NET 2003\Vc7\bin中)和.DEF文件(dll一般提供了),下面我以sqlite3_2_2的dll为例.
|
注意
如果运行时出现 缺少 mspdb71.dll 这个文件,那么进入这个目录:Microsoft Visual Studio .NET 2003\Common7\IDE 可找到这文件,将这文件拷贝到\Microsoft Visual Studio .NET 2003\Vc7\bin 即可。 |
将lib.exe所在的目录添加到环境变量path,在sqlite3.def所在目录下运行 lib /DEF:sqlite3.def /MACHINE:X86/MACHINE:X86参数是指定机器的类型,可以用lib /?查找帮助.现在应该生产了sqlite3.exp和sqlite3.lib两个文件.
导出 (.exp) 文件包含有关导出函数和数据项的信息。我们还用不到.现在把sqlite3.dll复制到windows\system32目录下,写test一个程序,链接到sqlite3.lib,Ok可以使用了
如果是是你自己建的DLL项目,在vs2003中DLL导入库的创建很简单(nanami指点,没有验证):
- 选择主菜单 项目->属性
- 选择 “链接器->高级->导入库”,然后输入一个以.lib结尾的文件名。默认一般可以用Marko设置成$(OutDir)/$ (ProjectName).lib。记得,Debug配置和Release配置都要设置。生成的导入库.lib会在和生成的DLL在同一个目录下。
- 在你需要调用DLL的项目里,将.lib文件加入到附加依赖项里,当然也要设置一下附加库目录~.~OK,大功告成了
分享到:
相关推荐
先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以...静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
利用simulink生成动态链接库供VS2015,Qt5.9.2成功调用。
详细的介绍了如何编写MFC共享式动态链接库的编写以及调试方法,以及如何在另一个程序中调用该dll中的接口创建动态链接库中定义的窗口
opengl必备的链接库,很不错.在project-setting-link中添加opengl32.lib glu32.lib glaux.lib这三个就可以了
在应用程序中用 LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在...
vc中连接dll的动态链接库的实例,dll的编写方式,和在程序中调用dll的时候需要注意的一些
动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接...
免费的PC与siemens S7PLC通讯的动态链接库,功能很强大
文档详细介绍了Linux下动态链接库的生产以及连接方法,对于从事Linux C/C++的技术开发人员有一定帮助
反编译软件,可将动态链接库反编译回c/c++
C#配置数据库所需要的动态链接库,使用方法社区有很多教程,这里就不提供了
1.java调用动态链接库实例 2.包含so库的生成实例 3.java调用so的实例
建立基于对话框的两个应用程序其界面,再建立一个动态连接库。
Visual C#和其它开发工具一样也能够调用动态链接库的API函数。.NET框架本身提供了这样一种服务,允许受管辖的代码调用动态链接库中实现的非受管辖函数,包括操作系统提供的Windows API函数。它能够定位和调用输出函数,...
动态链接库dll文件反编译软件
有时候我们想查看一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口函数,这个时候可以使用这个工具进行查看,绿色版免安装!
动态链接库的显示调用 动态链接库的显示调用 动态链接库的显示调用 动态链接库的显示调用
Python调用C#动态链接库 DLL 案例 python 版本 3.x dll 版本 .net standard 2.0 调用库 clr 安装 pip install pythonnet 调用接口 clr.AddReference
glaux.dll、glut32.dll、glut.dll、mfc71d.dll、msvcr71d.dll以及.h和.lib文件
openssl动态链接库libeay32.dll和ssleay32.dll,用于某些场景下使用ssl连接