`
zuroc
  • 浏览: 1307762 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

怎么链接到动态链接库呢?

    博客分类:
  • C++
阅读更多

先谢谢cppblog的各位指教.

链接到静态库(*.lib)很简单,不多说.链接到DLL动态库分隐式链接和显式链接,显式链接较复杂,请参考MSDN这里学习一下隐式链接.

为隐式链接到 DLL,可执行文件必须从 DLL 的提供程序获取下列各项:

  1. 包含导出函数和/或 C++ 类的声明的头文件(.H 文件)
  2. 要链接的导入库(.LIB files)。(生成 DLL 时链接器创建导入库。)
  3. 实际的 DLL(.DLL 文件)

 

隐式链接需要一个由动态连接库产生的.LIB文件(导入库),并把它链接到应用程序的工程中.该导入库仅包含加载DLL的代码和实现DLL函数调用的代码。在导入库中找到外部函数后,会通知链接器此函数的代码在DLL中。要解析对DLL的外部引用,链接器只需向可执行文件中添加信息,通知系统在进程启动时应在何处查找 DLL 代码。

系统启动包含动态链接引用的程序时,它使用程序的可执行文件中的信息定位所需的DLL。如果系统无法定位DLL,它将终止进程并显示一个对话框来报告错误。如果找到了DLL,系统将DLL模块映射到进程的地址空间中。与程序代码的其余部分一样,DLL代码在进程启动时映射到进程的地址空间中,且仅当需要时才加载到内存中。

Windows将遵循下面的搜索顺序来定位DLL

  1. 包含EXE文件的目录
  2. 进程的当前工作目录
  3. Windows系统目录(system/system32)。GetSystemDirectory 函数检索此目录的路径。
  4. Windows目录.GetWindowsDirectory 函数检索此目录的路径。
  5. 列在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指点,没有验证):

  1. 选择主菜单 项目->属性
  2. 选择 “链接器->高级->导入库”,然后输入一个以.lib结尾的文件名。默认一般可以用Marko设置成$(OutDir)/$ (ProjectName).lib。记得,Debug配置和Release配置都要设置。生成的导入库.lib会在和生成的DLL在同一个目录下。
  3. 在你需要调用DLL的项目里,将.lib文件加入到附加依赖项里,当然也要设置一下附加库目录~.~OK,大功告成了
 
分享到:
评论

相关推荐

    linux下动态链接库的使用方法

    2. 将动态链接库拷贝到/lib、/usr/lib目录下或者在这些系统共享库目录下创建指向自己动态链接库的符号链接。 3. 使用ldconfig命令管理动态链接库。ldconfig命令用来在默认目录和ld.so.conf配置的目录下搜索共享库,...

    C++动态链接库编程深入浅出

    ### C++动态链接库编程深入浅出 #### 概述 动态链接库(Dynamic Link Library,简称DLL)是在Microsoft Windows操作系统环境下的一种共享库文件格式。它允许开发者将多个应用程序所需的公共功能封装到一个单独的...

    opengl动态链接库

    OpenGL动态链接库是计算机图形学领域中不可或缺的一部分,它为开发者提供了一套强大的接口,用于在各种操作系统上创建复杂的3D图形和2D图形。OpenGL(Open Graphics Library)是一种跨语言、跨平台的应用程序编程...

    动态链接库辅助支持库

    在Windows编程中,动态链接库通常用于实现一些通用的功能,比如图形用户界面、网络通信、数据库连接等。与静态链接库不同,静态链接库会在编译时将库函数嵌入到应用程序中,而动态链接库则是在运行时由操作系统加载...

    利用simulink生成动态链接库

    在本例中,我们关注的是如何利用Simulink生成动态链接库(DLL),以便在Visual Studio 2015(VS2015)和Qt 5.9.2中调用这些库。 1. **建立Simulink模型**: 首先,我们需要创建一个Simulink模型,包含输入和输出...

    socket动态链接库

    开发人员可以将这个动态链接库集成到自己的C++项目中,通过调用提供的接口来实现TCP或UDP的网络功能,而无需从头编写网络通信的底层代码。 总的来说,Socket动态链接库简化了网络通信的实现过程,特别是对于TCP和...

    S7.Net动态链接库DLL.rar

    总结来说,S7.Net动态链接库DLL是连接西门子PLC与上位机软件的关键组件,它简化了通信过程,提高了开发效率,使得开发者能专注于上层应用的逻辑设计,而非底层通信细节。无论是对初学者还是经验丰富的工程师,理解并...

    动态链接库接口查看工具

    动态链接库(DLL,Dynamic Link Library)是Windows操作系统中一种重要的共享代码库,它封装了各种功能函数,供多个程序调用,以节省内存并提高系统效率。在开发或调试过程中,了解一个EXE文件依赖哪些DLL以及DLL...

    串口动态链接库

    串口动态链接库(DLL)是Windows操作系统中一种重要的编程技术,它允许多个应用程序共享同一段代码和数据,从而节省内存资源,提高程序执行效率。本文将深入探讨串口编程、动态链接库以及源码相关的知识。 串口编程...

    openGL动态链接库

    OpenGL动态链接库是计算机图形学领域的一个重要组成部分,主要用于创建复杂的3D图形和图像处理。在Windows操作系统中,这些库通常以DLL(动态链接库)的形式存在,以便多个应用程序可以共享其功能,而不必在每个程序...

    动态链接库运算器

    在应用程序中用 LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在...

    C#调用动态链接库的几个方法

    在C#中调用动态链接库(DLL)是常见的操作,这通常用于利用非托管代码的功能,比如Windows API或其他第三方库。以下是一些方法来实现这一目标: 1. **DllImport 特性**: - `DllImport` 特性是C#中调用非托管DLL的...

    MFC共享式动态链接库编写与调试

    在Windows编程环境中,MFC(Microsoft Foundation Classes)提供了一种高效的方式来开发应用程序,其中包括使用动态链接库(DLL)。本文将详细介绍如何使用MFC构建共享式动态链接库,并讲解如何调试和在其他程序中...

    详细步骤教你如何用VC6.0创建动态链接库

    详细步骤,不用担心网上的看不懂,看过后你也会觉得创建动态链接库的原理是这么简单,包含了调用dll的两种方法

    GSM MODEM 动态链接库

    GSM MODEM 动态链接库是用于与GSM短信终端进行交互的一种软件接口,它允许开发者通过编程的方式来控制和管理GSM MODEM,实现短信的发送、接收、删除等功能。这种接口通常采用动态链接库(DLL)的形式,可以在多种...

    C#调用C++动态链接库示例

    在.NET框架中,C#作为高级编程语言,可以与非托管代码,如C++编写的动态链接库(DLL)进行交互。这种交互性是通过P/Invoke(Platform Invoke)技术实现的,允许C#代码调用C++动态链接库中的函数。本示例将深入探讨...

    linux动态链接库

    动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接...

    无法定位程序输入点于动态链接库上的问题1

    这个错误通常表明程序在运行时找不到它依赖的一些动态链接库(DLLs)。以下是一个详细的分析和解决此类问题的步骤: 1. **动态链接库依赖**:在Windows系统中,当一个程序运行时,操作系统会查找程序需要的动态链接...

    LabVIEW调用动态链接库DLL详细介绍(包会) .txt

    ### LabVIEW调用动态链接库DLL详解 #### 一、前言 在现代软件开发过程中,经常需要将一些复杂的功能封装成独立的模块或者库,以便于复用和维护。对于LabVIEW这样的图形化编程环境而言,能够有效地调用外部的动态...

Global site tag (gtag.js) - Google Analytics