C/C++库之谜:动态库与静态库探秘

这篇具有很好参考价值的文章主要介绍了C/C++库之谜:动态库与静态库探秘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

在软件开发领域,动态库与静态库是常用的编程工具,它们的核心功能是为开发人员提供代码复用的便利性。动态库和静态库可以极大地简化开发流程,提高代码的可维护性。本文旨在探讨动态库与静态库的意义以及应用场景,分析它们在不同系统环境中的特点,并通过实际案例加深对这两者在游戏开发和企业级软件开发中的应用理解。

动态库和静态库分别有各自的优劣,对于开发人员来说,了解它们的特性、优缺点和具体应用场景,可以帮助他们更好地在实际开发过程中作出明智的决策。本文将首先介绍静态库,包括其概念、特点、创建过程、如何使用,以及它的优缺点。接下来,我们将介绍动态库,同样包括它的概念、特点、创建过程、如何使用,以及它的优缺点。在这两部分的基础上,我们将比较动态库与静态库在存储空间、运行性能、兼容性和维护方面的差异。然后,本文将探讨跨平台动态库与静态库,主要介绍Linux和Windows系统中的动态库与静态库。最后,我们将通过实际应用案例分析,在游戏开发和企业级软件开发中动态库与静态库的应用情况,以及如何根据项目需求选择和应用动态库与静态库。

动态库与静态库简介(Overview of Dynamic and Static Libraries)

动态库和静态库是计算机程序中常见的库文件类型。它们是程序开发中的重要工具,可以提高程序的开发效率和可维护性。

动态库(Dynamic Library)是一种可在程序运行时动态加载的共享库。它只在程序需要时才被加载到内存中,并可以被多个程序共享使用。动态库通常具有“.so”(Linux系统)或“.dll”(Windows系统)扩展名。

静态库(Static Library)是一种在程序编译时被静态链接的库文件。它在程序编译时就被链接到程序中,成为程序的一部分。静态库通常具有“.a”(Linux系统)或“.lib”(Windows系统)扩展名。

打开方式的差异

以下是加载C++动态库和在进程中打开它的比较:

  1. 加载方式:动态库在运行时被加载,这意味着它们在程序开始运行后的任何时间点都可以被加载和卸载。而在进程中打开动态库通常是在程序启动时完成的,一旦打开,就不能在程序运行时卸载。

  2. 内存使用:动态库在运行时被加载,这意味着它们只在需要时占用内存。而在进程中打开的动态库会在程序启动时加载到内存中,无论是否需要,都会占用内存。

  3. 符号解析:动态库在运行时被加载,这意味着它们的符号(函数和变量的名称)在运行时被解析。而在进程中打开的动态库的符号在程序启动时被解析。

  4. 版本控制:动态库在运行时被加载,这意味着可以在不重新编译程序的情况下更新库。而在进程中打开的动态库在程序启动时被加载,如果要更新库,可能需要重新编译程序。

  5. 错误处理:动态库在运行时被加载,这意味着可以在加载库时处理错误,例如,如果库不存在或无法被加载,可以在运行时捕获这个错误。而在进程中打开的动态库在程序启动时被加载,如果库不存在或无法被加载,程序可能会在启动时失败。

  6. 依赖管理:动态库在运行时被加载,这意味着可以在运行时解析和管理库的依赖关系。而在进程中打开的动态库在程序启动时被加载,依赖关系需要在程序启动时解析和管理。

  7. 性能:动态库在运行时被加载,这可能会导致一些运行时开销,例如,加载库、解析符号和处理错误。而在进程中打开的动态库在程序启动时被加载,这可能会导致程序启动时的一些开销,但在运行时没有额外的开销。

  8. 安全性:动态库在运行时被加载,这可能会导致一些安全问题,例如,如果一个恶意的库被加载,它可能会影响程序的行为。而在进程中打开的动态库在程序启动时被加载,这可能会减少这种安全风险,因为库在程序启动时就被加载和验证了。

探讨动态库与静态库的意义与应用场景(Exploring the Significance and Application Scenarios of Dynamic and Static Libraries)

动态库和静态库各有其优缺点,应用场景也有所不同。

动态库的主要优点是节省内存空间,提高系统的效率。动态库只在程序需要时才被加载到内存中,并可以被多个程序共享使用,这样可以减小程序的内存占用,提高系统的效率。此外,动态库的更新和维护也比较方便,可以避免重复编译和链接的问题。动态库的主要缺点是对于少量函数调用,动态库加载和解析的时间可能会超过函数的执行时间,从而影响程序的性能。

静态库的主要优点是可移植性强,可以避免动态库加载和解析的时间。静态库在程序编译时就被链接到程序中,成为程序的一部分,这样可以避免动态库加载和解析的时间,提高程序的性能。此外,静态库也可以避免动态库的版本兼容性问题。静态库的主要缺点是增加了程序的内存占用和可执行文件的体积,也使得程序的更新和维护变得困难。

动态库和静态库在不同的应用场景中发挥着不同的作用。对于需要频繁更新和维护的程序,或者需要节省内存空间的程序,动态库是一个更好的选择。而对于需要高性能、可移植性和稳定性的程序,静态库则是一个更好的选择。在实际应用中,程序开发者需要根据实际情况选择适合的库文件类型,以满足程序开发的需求。

二、静态库(Static Libraries)

静态库的概念与特点(Concept and Features of Static Libraries)

静态库是一种编译时将库中的目标代码合并到最终可执行文件中的库。这种库提供编译好的目标文件,可以直接与其他目标文件链接,形成一个完整的可执行程序。静态库具有以下特点:代码复用、易于部署、运行时性能较高。

创建静态库的过程(Creating a Static Library)

a. 生成目标文件(Generating Object Files)

生成目标文件的过程是将源代码编译成中间的二进制文件。这些中间文件包含了源代码的函数和数据结构定义,但尚未链接到其他文件。

b. 归档目标文件(Archiving Object Files)

归档目标文件是将多个目标文件组合成一个单一的库文件(通常具有“.a”或“.lib”扩展名)。归档工具(如ar或lib)用于执行此操作,生成一个可以在多个项目中重复使用的静态库文件。

使用静态库进行链接(Linking with a Static Library)

为了使用静态库,开发者需要在链接阶段将静态库文件与其他目标文件一同链接。链接器会将库中用到的目标文件与程序的其他部分合并,生成一个完整的可执行程序。

静态库的优缺点(Advantages and Disadvantages of Static Libraries)

优点:

  • 代码复用:静态库可以在多个项目中重复使用,简化了代码管理和部署过程。
  • 简化部署:静态库中的代码已经链接到可执行程序中,因此不需要额外的依赖文件。
  • 高运行时性能:由于代码已经链接到可执行程序中,不需要动态加载,因此运行时性能较高。

缺点:

  • 存储空间:每个使用静态库的应用程序都包含一份相同的代码副本,导致存储空间占用增加。
  • 更新维护困难:当静态库中的某个功能需要更新时,需要重新编译并链接所有使用该库的应用程序,增加维护复杂性。
  • 版本兼容性问题:不同版本的静态库可能存在兼容性问题,需要开发者在链接阶段确保所有库文件版本一致。

三、动态库(Dynamic Libraries)

动态库的概念与特点(Concept and Features of Dynamic Libraries)

动态库是在程序运行时将库中的目标代码动态地加载到内存并链接的库。与静态库相比,动态库具有更高的灵活性,可以节省存储空间并简化更新维护过程。动态库的主要特点包括:动态加载、节省存储空间、便于更新维护。

创建动态库的过程(Creating a Dynamic Library)

a. 编译共享对象文件(Compiling Shared Object Files)

创建动态库的第一步是将源代码编译成共享对象文件。共享对象文件是包含已编译代码和数据结构的二进制文件,可以在运行时动态链接到其他程序。

b. 生成动态库(Generating Dynamic Library)

生成动态库是将多个共享对象文件组合成一个单一的库文件(通常具有“.so”或“.dll”扩展名)。此操作可以使用编译器或链接器进行,生成一个可在多个项目中重复使用的动态库文件。

使用动态库进行链接(Linking with a Dynamic Library)

a. 编译时链接(Compile-time Linking)

编译时链接是指在程序编译阶段,将动态库的符号引用添加到可执行文件中。这种方式不需要将库的实际代码链接到可执行文件中,而是在程序运行时动态加载库。

b. 运行时链接(Run-time Linking)

运行时链接是指在程序运行过程中,动态地加载和链接动态库。这种方式可以实现更高的灵活性,允许程序根据需要选择加载不同的库版本或功能模块。

makefile 中的-L

在Makefile中,-L选项是用来指定链接器在链接时查找库文件的目录的。这并不意味着库会被加载到程序中,只是告诉链接器在哪里找到库文件。

当你在链接时指定一个库,例如-lmylib,链接器会在所有的-L指定的目录(以及默认的库目录)中查找名为libmylib.so(在Linux上)或libmylib.a的文件。如果找到了,链接器会将这个库链接到最终的可执行文件中。

然而,这并不意味着库的所有代码都会被加载到程序中。对于静态库(.a文件),只有程序实际使用到的那部分代码会被链接到程序中。对于动态库(.so文件),库的代码在程序运行时才会被加载到内存中,而且只有程序实际需要的那部分代码会被加载。

总的来说,-L选项只是告诉链接器在哪里找到库文件,而不是告诉它加载库。库是否被加载,以及加载多少,取决于程序是否使用了库的代码,以及库是静态的还是动态的。

在动态链接库的情况下,可执行文件中包含的“库指针”实际上是一种符号引用,它指向库中的函数或变量。这些引用的大小取决于链接器和操作系统,但通常它们的大小与普通的指针相当。

然而,这些引用并不会显著增加可执行文件的大小。在大多数情况下,可执行文件中的符号引用只占用了很小的一部分空间。大部分的空间都被程序的代码和数据占用。

当程序运行时,动态链接器会解析这些符号引用,找到相应的函数或变量在内存中的位置,然后更新引用以指向正确的位置。这个过程在程序启动时完成,不会在运行时占用额外的内存。

动态库的存储方式

在C++中,动态库(也称为共享库或DLL)本身并没有一个明确的“入口点”像main函数那样。动态库包含一组可以被其他程序调用的函数和变量,这些函数和变量的地址在加载库时被解析。

当你创建一个动态库时,你需要指定哪些函数和变量是库的公共接口,也就是说,哪些函数和变量可以被库的使用者调用。这通常是通过在函数和变量的声明前添加特殊的关键字(如__declspec(dllexport)在Windows上,__attribute__((visibility("default")))在GCC和Clang上)来完成的。

动态库中的函数和变量并不会按照它们在源代码中的顺序被排列。相反,它们的地址是在编译和链接时由编译器和链接器决定的。你可以使用工具(如nm在Unix-like系统上,dumpbin在Windows上)来查看动态库中的符号和它们的地址。

当你加载一个动态库时,操作系统会为库中的所有公共函数和变量分配内存。这些内存的大小取决于函数和变量的类型和数量,而不是它们在源代码中的顺序。

在C++中,当多个源文件被编译和链接成一个动态库时,每个源文件中的函数和变量都会被分配内存。这些内存的大小取决于函数和变量的类型和数量,而不是它们在源文件中的顺序。

函数和变量在动态库中的布局(也就是它们的地址)是由编译器和链接器决定的,而不是由源代码中的顺序决定的。因此,即使你在源代码中改变了函数和变量的顺序,也不会影响它们在动态库中的布局。

当你加载一个动态库时,操作系统会为库中的所有公共函数和变量分配内存。这些内存的大小取决于函数和变量的类型和数量,而不是它们在源代码中的顺序。

总的来说,多个源文件生成动态库时,函数和变量的内存布局是由编译器和链接器决定的,而不是由源代码中的顺序决定的。

动态库的优缺点(Advantages and Disadvantages of Dynamic Libraries)

优点:

  • 动态加载:动态库可以在程序运行时按需加载,提高了程序的灵活性。
  • 节省存储空间:多个应用程序可以共享同一动态库文件,减少了存储空间占用。
  • 便于更新维护:动态库中的功能更新只需要替换库文件,无需重新编译链接使用该库的应用程序。

缺点:

  • 运行时性能:由于需要在运行时动态加载库,动态库的运行时性能相对较低。
  • 依赖管理:动态库的使用需要确保依赖库文件存在且版本兼容,否则可能导致程序无法运行或出现错误。
  • 安全性:动态库的加载机制可能导致安全漏洞,恶意程序有可能通过替换库文件来攻击系统。

四、动态库与静态库的比较(Comparison of Dynamic and Static Libraries)

二者在存储空间上的差异(Differences in Storage Space)

静态库在编译时将库代码合并到可执行文件中,这意味着每个使用静态库的应用程序都包含一份相同的代码副本。这会导致存储空间占用增加。相反,动态库允许多个应用程序共享同一动态库文件,从而有效地减少了存储空间占用。

二者在运行性能上的差异(Differences in Runtime Performance)

静态库在编译阶段已经链接到可执行程序中,因此在运行时无需额外的加载过程,性能较高。而动态库需要在运行时动态加载和链接,这会导致一定程度的性能开销。然而,在许多情况下,这种性能差异并不显著,动态库仍具有较高的实用性。

二者在兼容性与维护上的差异(Differences in Compatibility and Maintenance)

静态库的维护相对较复杂,当静态库中的某个功能需要更新时,需要重新编译并链接所有使用该库的应用程序。而动态库的维护更为简便,只需替换库文件即可,无需重新编译链接应用程序。

在兼容性方面,静态库要求在链接阶段确保所有库文件版本一致。动态库的依赖关系在运行时解析,因此需要确保依赖库文件存在且版本兼容。动态库在运行时可以加载不同版本的库,提供了更高的灵活性,但也带来了更多的依赖管理工作。

综上所述,动态库与静态库各有优缺点,开发者需要根据项目需求、性能要求和维护成本来选择合适的库类型。

五、跨平台动态库与静态库(Cross-platform Dynamic and Static Libraries)

Linux系统中的动态库与静态库(Dynamic and Static Libraries in Linux)

在Linux系统中,动态库通常具有“.so”(shared object)扩展名,而静态库通常具有“.a”(archive)扩展名。Linux使用GNU编译器套件(GCC)创建和链接库文件。动态库的创建和链接方式与静态库有所不同,但总体上,库的使用在Linux系统中是类似的。

动态库(Dynamic Library)是一种可在程序运行时动态加载的共享库。它通常具有“.so”(shared object)扩展名,是Linux系统中最常用的库文件类型之一。与静态库不同,动态库只在程序需要时才被加载到内存中,并可以被多个程序共享使用。这种共享机制能够减小程序的内存占用,提高系统的效率。在Linux系统中,动态库可以使用“dlopen()”和“dlsym()”等系统调用来加载和使用。

静态库(Static Library)是一种在程序编译时被静态链接的库文件。它通常具有“.a”(archive)扩展名,是另一种常用的库文件类型。与动态库不同,静态库在程序编译时就被链接到程序中,成为程序的一部分。这种静态链接机制使得程序能够在不依赖外部库的情况下运行,但同时也增加了程序的内存占用和可执行文件的体积。在Linux系统中,静态库可以使用“ar”命令来创建和管理。

在Linux系统中,库文件的创建和链接通常使用GNU编译器套件(GCC)完成。对于动态库,可以使用“-shared”选项来创建共享库,使用“-l”选项来链接共享库。对于静态库,可以使用“-static”选项来创建静态库,使用“-l”选项来链接静态库。

使用库文件可以大大简化程序的开发和维护,提高程序的效率和可重用性。在Linux系统中,库文件是非常常用的编程工具,使用动态库和静态库可以根据实际情况选择适合的库文件类型,以满足程序开发的需求。

Windows系统中的动态库与静态库(Dynamic and Static Libraries in Windows)

在Windows系统中,动态库通常具有“.dll”(dynamic-link library)扩展名,而静态库通常具有“.lib”扩展名。Windows使用Visual Studio编译器创建和链接库文件。Windows中的动态库与静态库使用方式与Linux类似,但编译器和链接器选项可能有所不同。

在Windows系统中,库文件同样分为动态库和静态库两种类型。

动态库(Dynamic Library)是一种可在程序运行时动态加载的共享库。它通常具有“.dll”(dynamic-link library)扩展名,是Windows系统中最常用的库文件类型之一。与静态库不同,动态库只在程序需要时才被加载到内存中,并可以被多个程序共享使用。这种共享机制能够减小程序的内存占用,提高系统的效率。在Windows系统中,动态库可以使用“LoadLibrary()”和“GetProcAddress()”等系统调用来加载和使用。

静态库(Static Library)是一种在程序编译时被静态链接的库文件。它通常具有“.lib”扩展名,是另一种常用的库文件类型。与动态库不同,静态库在程序编译时就被链接到程序中,成为程序的一部分。这种静态链接机制使得程序能够在不依赖外部库的情况下运行,但同时也增加了程序的内存占用和可执行文件的体积。在Windows系统中,静态库可以使用Visual Studio的“lib”命令来创建和管理。

在Windows系统中,库文件的创建和链接通常使用Visual Studio编译器完成。对于动态库,可以使用“/DLL”选项来创建共享库,使用“/link”选项来链接共享库。对于静态库,可以使用“/MT”选项来创建静态库,使用“/link”选项来链接静态库。

使用库文件可以大大简化程序的开发和维护,提高程序的效率和可重用性。在Windows系统中,库文件同样是非常常用的编程工具。开发者需要根据实际情况选择适合的库文件类型,以满足程序开发的需求,并在跨平台开发时考虑平台相关的差异,确保库在不同平台上能够正常运行。

跨平台开发时,开发者需要考虑不同操作系统对库文件的处理方式。为了实现跨平台的库,开发者可以使用跨平台开发工具和库(如CMake、Qt等)来简化构建和链接过程,确保库文件在不同平台上的兼容性。同时,开发者需要关注平台相关的差异,例如路径分隔符、文件系统和系统调用等,确保库在不同平台上能够正常运行。

在 Windows 下,我们可以使用 C++ 编写动态库(DLL,Dynamic Link Library)和静态库(LIB,Static Library)。

动态库 (DLL)

首先,我们创建一个动态库。这是一个简单的示例,库中只包含一个函数 add 用于计算两个整数的和。

  1. 创建一个名为 my_library.h 的头文件,内容如下:
#pragma once

#ifdef MY_LIBRARY_EXPORTS
#define MY_LIBRARY_API __declspec(dllexport)
#else
#define MY_LIBRARY_API __declspec(dllimport)
#endif

extern "C" MY_LIBRARY_API int add(int a, int b);
  1. 创建一个名为 my_library.cpp 的源文件,内容如下:
#include "my_library.h"

MY_LIBRARY_API int add(int a, int b) {
    return a + b;
}
  1. 使用 Visual Studio 或其他支持的编译器编译 DLL。对于 Visual Studio,你需要创建一个 DLL 项目,并将 my_library.cpp 添加到项目中。然后,将预处理器定义 MY_LIBRARY_EXPORTS 添加到项目设置中。最后,构建项目以生成 DLL 文件(例如 my_library.dll)。

静态库 (LIB)

现在,我们创建一个静态库。这是一个简单的示例,库中只包含一个函数 subtract 用于计算两个整数的差。

  1. 创建一个名为 my_static_library.h 的头文件,内容如下:
#pragma once

int subtract(int a, int b);
  1. 创建一个名为 my_static_library.cpp 的源文件,内容如下:
#include "my_static_library.h"

int subtract(int a, int b) {
    return a - b;
}
  1. 使用 Visual Studio 或其他支持的编译器编译静态库。对于 Visual Studio,你需要创建一个静态库项目,并将 my_static_library.cpp 添加到项目中。然后,构建项目以生成 LIB 文件(例如 my_static_library.lib)。

使用动态库和静态库

下面是如何在应用程序中使用上述动态库和静态库的示例。

  1. 在应用程序源代码中包含相应的头文件:
#include "my_library.h"
#include "my_static_library.h"
  1. 调用库中的函数:
int main() {
    int result1 = add(3, 4);
    int result2 = subtract(7, 2);
    // ...其他代码...
    return 0;
}
  1. 将动态库(DLL)和静态库(LIB)添加到项目中。对于 Visual Studio,你需要在项目设置中添加对静态库的引用(例如 my_static_library.lib),并确保动态库(例如 my_library.dll)位于应用程序的运行目录中。

  2. 编译并运行应用程序。如果一切顺利,你的应用程序应该能成功调用动态库和静态库中的函数。

六、实际应用案例分析(Practical Application Case Analysis)

静态库与动态库在游戏开发中的应用(Application of Static and Dynamic Libraries in Game Development)

在游戏开发中,动态库和静态库都发挥着重要作用。静态库通常用于链接核心游戏引擎代码和其他不易更改的部分,以提高性能。同时,静态库也有助于保护源代码和知识产权。

动态库则适用于游戏中模块化的部分,如插件、扩展包或者更新补丁等。动态库可以实现更简便的更新和维护,允许开发者在游戏发布后添加新功能或修复错误,而无需重新发布整个游戏。此外,动态库也方便了游戏开发者与第三方插件开发者的协作。

静态库与动态库在企业级软件开发中的应用(Application of Static and Dynamic Libraries in Enterprise-level Software Development)

在企业级软件开发中,静态库和动态库的应用同样广泛。静态库常用于包含核心业务逻辑或保密性高的模块,以确保安全性和性能。而动态库则更适用于易于扩展和维护的模块,如数据库驱动程序、中间件组件或者与其他软件集成的接口等。

动态库在企业级软件中的一个典型应用是插件架构。许多企业级软件提供了插件接口,允许用户或开发者根据需求定制功能。通过使用动态库,企业级软件能够在运行时加载和卸载插件,提高了软件的可扩展性和灵活性。同时,动态库也方便了软件的更新和维护,提高了企业级软件的生命周期和可用性。

七、总结(Conclusion)

动态库与静态库的选择与应用(Choosing and Applying Dynamic and Static Libraries)

动态库与静态库各具优缺点,选择使用哪种类型的库取决于具体的项目需求、性能要求和维护成本。静态库在性能上具有优势,且较为安全,但可能增加存储空间占用和维护难度。动态库则具有更好的可扩展性和维护性,降低了存储空间占用,但需要关注运行时的依赖管理。

学习与成长(Learning and Growth)

在计算机科学和软件开发领域,不断学习和成长至关重要。通过掌握动态库与静态库的知识和技能,我们能够更加深入地理解软件开发过程和链接过程。此外,学习动态库与静态库的使用方法可以为我们在不同类型的项目中作出更明智的决策,进一步提升开发效率和软件质量。在未来的学习和实践中,我们将继续深化对这些概念的理解,以便更好地应对各种软件开发挑战。文章来源地址https://www.toymoban.com/news/detail-419432.html

到了这里,关于C/C++库之谜:动态库与静态库探秘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux:动态库与静态库】

    静态库( .a ):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。 动态库( .so ):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表

    2024年02月06日
    浏览(31)
  • Linux中的动态库与静态库

    软链接 当我们不在本地路径下运行时,运行目标二进制文件一般要写明该程序路径. 但是这样运行对于路径较为复杂的程序极为耗费时间,为了简便操作,我们可以将该可执行程序的路径设置为软链接.此时的软链接一般也可认为是windows可执行程序的快捷方式. 创建软链接命令如下

    2024年02月12日
    浏览(34)
  • 【计算机网络】 静态库与动态库

    库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。静态库是将整个库文件都拷贝到可执行文件中了,而动态库只是将索引文件拷贝到可执行文件中,可以通过索引文件找到动态库文件。 静态库实践 使用方法 首先我们用vs创建一个静态库,再创建

    2024年02月09日
    浏览(37)
  • CMake构建静态库与动态库以及使用

    用例子的方式通俗易懂地解释CMake构建静态库与动态库的过程。 任务: 建立一个静态库和动态库,提供HelloFunc 函数供其他程序编程使用,HelloFunc向终端输出Hello World 字符串。 安装头文件与共享库。 编写一个程序去使用构建的共享库。 (1)建立 t3 目录,用于存放本节涉及到

    2024年02月07日
    浏览(27)
  • 【Linux】静态库与动态库制作及运行原理

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。 先来总体描述下静态库与动态库的区别. 静态库是将头文件总体复制到可执行文件当中 。 动态库是在可执行程序运行时进行了动态链接 (所需要某个实现方法就去内存中查找). 所

    2024年02月05日
    浏览(24)
  • 深入理解Linux中的动态库与静态库

                                                      🎬慕斯主页 : 修仙—别有洞天                                                 ♈️ 今日夜电波:I Wish My Mind Would Shut Up—Ivoris                                                          

    2024年01月24日
    浏览(40)
  • VS2019静态库与动态库入门操作指南

    源代码的二进制文件; 分为动态编译与静态编译; 1)区别 (1)动态编译不便于发布,静态编译便于发布; (2)动态编译生成的可执行文件体积较小,静态生成的可执行文件体积较大。 ​ Windows中静态库后缀为.lib 动态库后缀为.dll ​ Linux中静态库后缀为.a 动态库后缀为.

    2024年02月06日
    浏览(28)
  • .NET Native AOT的静态库与动态库

    .NET不仅可以使用 C静态库与动态库,也可以将.NET实现的函数导出为C静态库与动态库。在没有Native Aot之前,.NET只能通过P/Invoke享受C/C++生态,而在Native Aot之后,不仅可以享受这些生态,还可以开发SDK供其他语言调用。 .NET Native AOT的NativeLib参数用于指定本机库的类型。在.NET

    2024年02月16日
    浏览(25)
  • 「C/C++」C/C++静态链接库与动态链接库

    博客主页:何曾参静谧的博客 文章专栏:「C/C++」C/C++学习 静态链接库(Static Linking Library): 是在编译时将库代码与应用程序静态链接在一起的库。它们被编译为二进制文件,并在运行时作为应用程序的一部分被载入内存。这种库被称为“静态”是因为它们在编译时被链接,

    2024年02月01日
    浏览(29)
  • 探秘力扣之谜:如何轻松解决最长公共前缀问题?

    本篇博客我会讲解力扣中的“14. 最长公共前缀”这道题,这是题目链接。 先来审题: 以下是几个输出示例: 提示: 这道题的思路其实并不难,也是一些字符串的常规操作的结合。大家可以先思考一下,再来听我讲解。 思路是这样的:外层循环遍历第一个字符串的每一个字

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包