.h .lib .dll之间的关系和区别

阅读数:161 评论数:0

跳转到新版页面

分类

C/C++

正文

一、h头文件

头文件是编译时必须的,声明函数接口。

通常包含函数声明、宏定义、数据类型定义和其他预处理指令。头文件的主要作用是提供函数和变量的声明,使得在不同的源文件中可以引用这些函数和变量。

在使用 DLL 文件时,头文件通常包含了 DLL 中导出函数的声明。例如:

// mylibrary.h
#ifndef MYLIBRARY_H
#define MYLIBRARY_H

#ifdef MYLIBRARY_EXPORTS
#define MYLIBRARY_API __declspec(dllexport)
#else
#define MYLIBRARY_API __declspec(dllimport)
#endif

MYLIBRARY_API void myFunction();

#endif // MYLIBRARY_H

二、lib文件

lib文件是链接时需要,当在程序中引用了一个H文件里的函数时,编译器通过LIB文件找到调用函数的位置,如果是动态链接,则找到对应 DLL,如果是静态链接,则从LIB文件中找。

  • 静态库文件:包含了库的所有代码,在编译时链接到程序中。使用静态库时,库的代码会被复制到每个使用它的程序中。

  • 导入库文件:用于动态链接库(DLL)的链接过程。导入库文件不包含实际的函数实现,而是包含了函数在 DLL 中的引用信息。在编译时,链接器使用导入库文件来解析符号,并在运行时加载实际的 DLL 文件。

三、dll文件

dll文件是动态连接时需要的。

动态链接库在程序运行时加载,而不是在编译时链接。这种方式有以下几个优点:

  • 节省内存:多个程序可以共享同一个 DLL 文件中的代码。
  • 模块化开发:可以将程序分成多个模块,每个模块可以单独开发和更新。
  • 减少程序大小:程序只需要包含对 DLL 文件的引用,而不需要包含整个库的代码。



相关推荐

修饰变量的声明 例如: 若a.c中需要用b.c中的变量 int v,可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块extern引用到的变量通常是全局变量。 还有一点是

表示链接xxx.lib这个库,告诉编译器你要用到xxx.lib库。 这和在工程设置里写入链入xxx.lib的效果一样

一、简介 libcurl是一个跨平台的网络协议库,libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multiinterface方式,前者是采用阻塞的方式发送

一、简介 libsndfile是一个C语言写成的开放源代码(LGPL)的音频文件读写的库,可以读写WAV、FLAC等常见格式(因为专利原因不支持mp3)。 二、

一、概述 对于glibc来讲,除了C语言标准之外,还包含了posix、systemV等特性。为此,glibc针对不同的标准有特定的宏定义,用于指定当前代码所遵循的标准和版本,这些宏定义被称为特性测试宏

一、概述 在 Windows 上创建和使用 DLL 时,__declspec(dllexport) 和 __declspec(dllimport) 是两个非常重要的关键字,它们用于控制函数和变量的导出

一、__stdcall __stdcall 是微软 Windows 平台上常用的一种调用约定,特别是在 Win32 API 中广泛使用。它具有以下特点: 参数顺序:参数从右到左推入堆栈。 堆栈清理:

JNI 调用 DLL 动态加载:JNI 使用 System.loadLibrary() 或 System.load() 方法来动态加载 DLL。这个过程不需要链接时的静态库(.lib 文件),因为

一、概述 使用 QLibrary 动态加载 DLL 时,不需要在项目中链接对应的 .lib 文件。这是因为 QLibrary 直接在运行时加载 DLL 并解析函数地址,而不依赖于编译时的符号解析。 通