首页 > 其他分享 >库library的功能和组成_将库链接到可执行文件

库library的功能和组成_将库链接到可执行文件

时间:2024-12-07 16:13:08浏览次数:9  
标签:可执行文件 将库 library add MyLibrary 链接

以下为与AI的聊天内容,记录以供复习以及空闲时阅读使用

在软件开发中,库(library)是一组预编译的代码集合,可以被多个程序或模块共享和重用。库通常包含函数、类、数据结构和其他资源,开发者可以在自己的程序中调用这些库中的功能,而无需重新编写代码。

库可以分为两种主要类型:

  1. 静态库(Static Library)
    • 静态库在编译时被链接到应用程序中,生成一个单一的可执行文件。
    • 静态库的文件扩展名通常是 .lib(Windows)或 .a(Unix/Linux)。
  2. 动态库(Dynamic Library)
    • 动态库在运行时被加载到应用程序中,可以被多个程序共享。
    • 动态库的文件扩展名通常是 .dll(Windows)、.so(Unix/Linux)或 .dylib(macOS)。

在 CMake 中,可以使用 add_library 命令来创建库。例如:

# 创建一个静态库
add_library(MyStaticLib STATIC mylib.cpp)

# 创建一个动态库
add_library(MySharedLib SHARED mylib.cpp)

然后,可以使用 target_link_libraries 命令将库链接到目标:

# 将库链接到可执行文件
add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable MyStaticLib MySharedLib)

总结:

  • 库是一组预编译的代码集合,可以被多个程序共享和重用。
  • 库分为静态库和动态库。
  • 在 CMake 中,可以使用 add_library 命令创建库,并使用 target_link_libraries 命令将库链接到目标。

库(library)通常由以下几个部分组成:

  1. 头文件(Header Files)
    • 头文件通常以 .h.hpp 作为扩展名。
    • 头文件包含函数、类、宏和数据结构的声明。
    • 头文件用于定义库的接口,供其他程序使用。
  2. 源文件(Source Files)
    • 源文件通常以 .c.cpp.cc 等作为扩展名。
    • 源文件包含函数、类和其他代码的实现。
    • 源文件在编译时生成目标文件(.o.obj),然后这些目标文件被打包成库文件。
  3. 库文件(Library Files)
    • 库文件是编译后的二进制文件,包含了源文件的实现。
    • 静态库文件通常以 .lib(Windows)或 .a(Unix/Linux)作为扩展名。
    • 动态库文件通常以 .dll(Windows)、.so(Unix/Linux)或 .dylib(macOS)作为扩展名。
  4. 元数据和配置文件(Metadata and Configuration Files)
    • 有些库可能包含元数据和配置文件,用于描述库的版本、依赖关系、编译选项等。
    • 这些文件可以帮助构建系统(如 CMake)正确地使用和链接库。

示例:
假设我们有一个名为 MyLibrary 的库,它包含以下文件:

  • 头文件:
    • MyLibrary.h
  • 源文件:
    • MyLibrary.cpp
  • 静态库文件:
    • MyLibrary.lib(Windows)
    • libMyLibrary.a(Unix/Linux)
  • 动态库文件:
    • MyLibrary.dll(Windows)
    • libMyLibrary.so(Unix/Linux)
    • libMyLibrary.dylib(macOS)

在 CMake 中,可以这样定义和使用这个库:

# 定义库
add_library(MyLibrary STATIC MyLibrary.cpp)
# 或者
add_library(MyLibrary SHARED MyLibrary.cpp)

# 将库链接到可执行文件
add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable MyLibrary)

总结:

  • 库由头文件、源文件、库文件以及可能的元数据和配置文件组成。
  • 头文件定义接口,源文件实现功能,库文件包含编译后的二进制代码。
  • 在 CMake 中,可以使用 add_librarytarget_link_libraries 命令来定义和使用库。

将库链接到可执行文件是指在编译过程中,将库中的函数、类和其他符号与可执行文件中的引用进行匹配和绑定的过程。这个过程确保可执行文件在运行时能够正确调用库中的功能。

链接过程分为两种类型:

  1. 静态链接(Static Linking)
    • 在编译时,将静态库的代码复制到可执行文件中。
    • 生成的可执行文件包含所有依赖的库代码,因此不需要在运行时依赖外部库文件。
    • 优点:可执行文件独立,不需要额外的库文件。
    • 缺点:可执行文件体积较大,更新库时需要重新编译可执行文件。
  2. 动态链接(Dynamic Linking)
    • 在运行时,将动态库加载到内存中,并将其符号与可执行文件中的引用进行匹配。
    • 生成的可执行文件较小,但在运行时需要依赖外部的动态库文件。
    • 优点:可执行文件体积较小,更新库时不需要重新编译可执行文件。
    • 缺点:需要在运行时确保动态库文件存在。

在 CMake 中,可以使用 target_link_libraries 命令将库链接到可执行文件。例如:

假设我们有一个名为 MyLibrary 的库和一个名为 MyExecutable 的可执行文件:

# 定义库
add_library(MyLibrary STATIC MyLibrary.cpp)
# 或者
add_library(MyLibrary SHARED MyLibrary.cpp)

# 定义可执行文件
add_executable(MyExecutable main.cpp)

# 将库链接到可执行文件
target_link_libraries(MyExecutable MyLibrary)

在这个例子中:

  • add_library 命令定义了一个名为 MyLibrary 的库。
  • add_executable 命令定义了一个名为 MyExecutable 的可执行文件。
  • target_link_libraries 命令将 MyLibrary 库链接到 MyExecutable 可执行文件。

总结:

  • 将库链接到可执行文件是指在编译过程中,将库中的符号与可执行文件中的引用进行匹配和绑定。
  • 链接过程分为静态链接和动态链接。
  • 在 CMake 中,可以使用 target_link_libraries 命令将库链接到可执行文件。

标签:可执行文件,将库,library,add,MyLibrary,链接
From: https://www.cnblogs.com/l25428455/p/18592321

相关文章

  • 常规加载器技术(Conventional Loader Techniques)主要用于操作系统中,负责将程序加载到内
    在Web开发中,常规加载器和高阶技巧加载器(或优化器)是实现更高效资源加载和提升性能的关键技术。常规加载器通常是一些基础的加载机制,而高阶技巧加载器则是更高级的优化方法,能够精细化地控制资源的加载时机和顺序,提升页面的加载性能和用户体验。常规加载器(基础加载器)懒加载(Lazy......
  • 使用GraalVM将SpringBoot工程编译成平台原生的可执行文件
    原文链接https://blog.liuzijian.com/post/209e68d0-a418-1737-503a-d47e6d2d9350.html   1.GraalVMGraalVM (https://www.graalvm.org/)是一个高性能的JDK,旨在加速用Java和其他JVM语言编写的应用程序的执行,同时还提供JavaScript,python和许多其他流行语言的运行时。Gr......
  • [C++][MSVC][Error] 检测到 RuntimeLibrary 的不匹配项: 值 MT_StaticRelease 不匹配
    1简介本文将介绍在C++编程中使用MSVC编译器时可能遇到的错误:检测到RuntimeLibrary的不匹配项:值MT_StaticRelease不匹配值MD_DynamicRelease。该错误通常是由于编译器和链接器之间的设置不一致引起的。2VisualStudio环境在MSVC工程上右键->属性,找到配置属性->C/C......
  • MeIoN's XCPC Library - ICPC2024 - Kunming
    MeIoN'sXCPCLibrary-ICPC2024-Kunming目录MeIoN'sXCPCLibrary-ICPC2024-Kunming目录Z_HMeIoN_H.hppMeIoN_IO.hppMeIoN_PRET.hppMeIoN_debug.hppfast_io.hppdsLinearBasis.hppWavelet_Matrix.hppbit_vec.hppchothlly.hppdsu.hppfenw......
  • zlibrary镜像官网入口,全球最大数字图书馆恢复了
    Z-Library(简称Z-Lib,前身为BookFinder)是一个著名的影子图书馆网站,用户可以在上面下载各类书籍、期刊和文章。该网站目前收录了超过1,000万本书籍和8,000万篇文章。由于版权问题,Z-Library曾在2022年11月3日遭到封锁。然而,经过调整,Z-Library通过新的官方网址和镜像网站......
  • STM32 cubeIDE 可执行文件 *.elf 的烧录
    1.准备工具:ST_LINKST-Link/V2 JTAG/SWD标准的接口排列:2.用杜邦线连接单片机3.开始烧录方法1:Ctrl+B编译项目成功后,右键项目名-Runas- STM32 C/C++Application方法2:Ctrl+B编译项目成功后,点击RunDebug按钮,直接烧录。当有多个程序时,默认烧写最近烧录过的程序,点击......
  • Qt 打包为可执行文件(详解)
    https://blog.csdn.net/dfr110719/article/details/136992619<divid="content_views"class="htmledit_views"><pid="main-toc"><strong>目录</strong></p>一.打包为文件夹二.打包为可执行......
  • FreeRTOS LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 存在的意义以及高于它的中断不能调
    ThisishowIunderstandit.我是这样理解的。Ifwenowhave2tasksand6interrupts,amongwhich,andwheninterrupts4,5,6arerunning,theywillcallthesafefreertosapi.假如我们现在有2个任务以及6个中断,其中,中断4、5、6运行的时候将会调用safefreert......
  • Z-library免费图书下载网站使用指南与最新地址分享(长期更新)
    Z-Library(也被称为Z-Lib)是一个大型的在线数字图书馆和文件共享网站,有各种各样的书籍和学术文章提供免费下载。它的藏书量极其庞大,涵盖了多种语言和学科领域。zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓/ipad)安装包下载:https://pan.quark.cn/s/45d1c03ef62b(随......
  • Zlibrary最新镜像网址,全球最大数字图书馆已恢复
    zlibrary网站距离上次被美国执法机构端掉,已经过去了好几个月。近期Zlibrary的镜像站点终于恢复正常!无需任何工具,可直接访问。目前图书藏量已经达到了11948431本,我试着搜一些冷门小说也是可以搜到,真正的镜像网站!!zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓)客户端:ht......