首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在动态链接中,当库被更新时,.exe如何知道在哪里搜索库?

在动态链接中,当库被更新时,.exe 通过搜索路径来确定库的位置。

搜索路径是一个由多个目录组成的列表,用于指定操作系统在哪些位置搜索库文件。当一个程序需要使用某个库时,它会按照搜索路径的顺序逐个查找这些目录,直到找到所需的库文件或者搜索路径列表结束。

在 Windows 操作系统中,搜索路径包括以下几个常用的位置:

  1. 当前目录:程序所在的目录。
  2. 系统目录:Windows 系统文件所在的目录,通常是 C:\Windows\System32。
  3. Windows 目录:Windows 系统文件所在的目录,通常是 C:\Windows。
  4. 用户目录:当前用户的个人文件夹,通常是 C:\Users\用户名。
  5. 环境变量 PATH 中指定的目录:可以通过设置环境变量来添加额外的搜索路径。

当库被更新时,可以通过以下几种方式来确保 .exe 知道在哪里搜索库:

  1. 更新库文件并替换原有的库文件:将新版本的库文件直接替换掉旧版本的库文件,确保文件名和路径保持一致。这样,当程序运行时,.exe 将会在搜索路径中找到并加载更新后的库文件。
  2. 更新搜索路径:将新版本的库文件所在的目录添加到搜索路径中。可以通过修改系统环境变量 PATH 或者在程序中动态设置搜索路径来实现。
  3. 使用版本管理工具:使用版本管理工具来管理库文件的更新和切换。通过版本管理工具,可以在不同的版本之间切换,并确保程序使用正确的库文件。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。这些产品可以帮助用户在云端部署和管理应用程序,提供稳定可靠的基础设施支持。具体推荐的产品和产品介绍链接地址如下:

  1. 云服务器(ECS):提供可扩展的计算能力,支持多种操作系统和应用场景。了解更多:腾讯云云服务器
  2. 云数据库 MySQL 版(CDB):提供高性能、可扩展的关系型数据库服务。了解更多:腾讯云云数据库 MySQL 版
  3. 云对象存储(COS):提供安全可靠的对象存储服务,适用于存储和管理各种类型的文件和数据。了解更多:腾讯云云对象存储
  4. 云函数(SCF):提供事件驱动的无服务器计算服务,支持按需运行代码,无需关心底层基础设施。了解更多:腾讯云云函数
  5. 人工智能平台(AI):提供丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。了解更多:腾讯云人工智能平台

以上是腾讯云提供的一些与云计算相关的产品,可以根据具体需求选择适合的产品来支持应用程序的开发和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【一站式解惑】Linux.a、.so和.o文件以及-I,-L,LIBRARY_PATH,LD_LIBRARY_PATH等

(3)动态的情况下,有两个文件,一个是引入库(.LIB)文件(实际上也算是一个静态,只是链接只能把函数DLL的入口链接exe,而不像真正静态链接那样将函数体真正链接exe ,通过lib...,因此应用程序的可执行文件,存放的不是调用的函数代码,而是DLL中所要调用的函数的内存地址,这样一个或多个应用程序运行是再把程序代码和调用的函数代码链接起来,从而节省了内存资源。...(7)关于更新: 每次新增加动态加载的函数、删除某个函数或者修改某个函数的路径,都要重新运行ldconfig来更新缓存文件/etc/ld.so.cache,此文件保存已排好序的动态链接名字列表...动态程序编译并不会被链接到目标代码,而是程序运行是才载入,因此程序运行时还需要动态库存在。本节主要通过举例来说明如何在Linux创建静态动态,以及使用它们。...,静态动态同名,gcc命令将优先使用动态,默认去链接/usr/lib和/lib等目录动态,将文件libmyhello.so复制到目录/usr/lib即可。

5K52

【Linux】静态动态

链接的本质:无非就是我们调用库函数的时候和标准如何关联的问题 的名称:去掉前缀lib去掉后缀.so/.a剩下的就是名称,比如libc.so就是C gcc 在编译默认使用动态链接,而生成静态链接...直接把安装好的使用起来: 头文件找不到? 编译器搜索头文件默认在当前目录下搜索系统默认指定路径下搜索。...我们形成可执行程序的时候,文件要使用的话也要知道所在的路径在哪里,系统的默认路径是/lib64。所以我们要带上-L。告诉的路径在哪里。...答案是无关的,接下来运行是和OS有关的,动态是运行时才加载的,所以程序运行起来,OS和shell也是需要知道是在哪里的!而我们自己制作的并没有系统路径下,OS无法找到!...,会比较浪费空间,把静态拷贝到程序的代码区里: 动态加上fPIC形成位置无关码,采用相对编址方案,程序链接对应当中的偏移量添加到可执行程序,运行时一旦加载进来,经过地址空间映射,把映射到地址空间之后

29930
  • 白加黑免杀制作(详细)

    入口函数(DllMain) DllMain是动态链接的可选入口点。系统启动或终止进程或线程,它会使用进程的第一个线程为每个加载的 dll 调用入口点函数。...静态链接(.lib) 在编译动态链接(.dll)还会输出相应的静态链接(.lib): lib 文件包含一些索引信息,记录了 dll 函数的入口和位置,lib 用于开发编译使用,dll 则在运行时使用...二、dll 开发和调试 1. dll 开发 首先使用vs2022新建一个动态链接,然后 pch.cpp 编写一个导出函数: 然后 pch.h 定义该函数,定义代码如下: #ifdef Dll3...dll exe 执行文件,使用方法如下: # 查看 dll 包含哪些函数 dumpbin /exports a.dll # 查看 exe 中加载了哪些动态 dumpbin /imports a.exe... exe 中使用了静态链接方式加载的 dll 能直接在 Dependencies 和 dumpbin 等PE查看器查看出来: 静态链接所需的 dll 不存在时会弹出错误提示框并提示确少的 dll

    5.7K71

    开篇:预备知识---2

    可以看到,除了添加了部分注释之外,#include 指令将 custom1.h 头文件的文本内容复制到 #include 指令所在的位置了。那么包含的头文件还包含了其他头文件情况如何呢?...动态链接动态链接即为动态加载的,链接不将整个文件链入可执行程序,只是将文件的信息放入可执行文件可执行程序运行时如果需要使用该动态链接的某个模块或者函数再进行动态加载。...上面提到过:使用动态链接到的可执行程序是程序运行并使用到对应的数据加载,即为运行时加载。也就是说虽然我们通过动态链接得到了可执行程序。...上问提到:使用动态链接文件并不是将整个文件链入可执行程序文件,而是可执行文件存入动态链接文件的相关信息,以供程序在运行过程需要进行动态链接文件的加载。...(Linux 系统),链接文件夹不存在动态链接文件,才使用静态文件,你也可以在编译命令中加入 -static 参数来禁止 GCC 使用动态进行链接,这时 GCC 只会使用静态来进行链接

    76920

    c++动态和静态的区别_静态库里面包含动态

    ——让大家学会创建与使用静态动态知道静态动态的区别,知道使用的时候如何选择。...动态程序编译并不会被连接到目标代码,而是程序运行是才载入。不同的应用程序如果调用相同的,那么在内存里只需要有一份该共享的实例,规避了空间浪费问题。...动态程序运行是才载入,也解决了静态对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态即可,增量更新动态库特点总结: l 动态把对一些库函数的链接载入推迟到程序运行的时期。...l const char *dlerror(void):动态链接操作函数执行失败,dlerror可以返回出错信息,返回值为NULL表示操作函数执行成功。...l 动态程序编译并不会被连接到目标代码,而是程序运行是才载入,因此程序运行时还需要动态库存在,因此代码体积较小。

    1.9K30

    【linux】gcc makefile

    ”的函数实现,且预编译包含的“stdio.h”也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?...其后缀名一般为“.a” 动态与之相反,在编译链接并没有把文件的代码加入到可执行文件,而是程序执行时由运行时链接文件加载,这样可以节省系统的开销。...更新和维护:如果需要更新(例如修复安全漏洞),则必须重新编译和链接整个应用程序。 动态链接 定义:动态链接,程序使用的在编译不被复制到可执行文件。...相反,留在独立的文件动态),程序启动或运行时由动态链接器(如Linux上的 ld.so)加载。...优点: 内存和磁盘空间效率:多个程序可以共享内存同一个的单个副本,减少了内存和磁盘的使用。 易于更新更新文件后,所有使用该动态的程序都会自动使用更新后的版本,无需重新链接

    5310

    【运行时】FFI 链接 C ABI 动态链接(实操分享)

    然后,设置环境变量$RUSTFLAGS export RUSTFLAGS=-L native= 更多解释: 依赖的【C ABI动态链接(文件)】必须预置于此下。...否则,在编译过程,会出现“找不到链接”的错误= note: ld.exe: cannot find -l。...支持以Cargo Package根目录为起点的【相对路径】。 native=前缀表示:该下预存都是C ABI链接,而不是Rust ABI链接。...; } 最后,执行cargo run命令,完成: 编译源码 启动.exe可执行文件。 程序初始化过程,寻找【C ABI动态链接】文件和链接之。...所以,我的下一个目标就是:在编译,将【静态链接.a文件】直接编译入.exe可执行文件内,来避免dll文件意外丢失的问题(当然,.exe文件的体积也会更大些)。

    1.1K30

    CVE-2020-1362 漏洞分析

    漏洞利用过程 创建 CustomProperty 对象 WalletService 服务由 WalletService.dll 提供,WalletService.dll 实际上是一个动态链接形式的 Com...伪造虚表,覆盖附表指针 由于同一个动态不同的进程,它的加载基址也是一样的,我们可以知道所有dll里面的函数的地址,所以可以获得伪造的虚表里面的函数地址。 那么把虚表放哪里呢?... windows 服务提权,通常的办法是把程序流控制到可以执行 LoadLibrary() 等函数来加载一个由我们自己编写的动态链接,因为加载 dll 的时候会执行 dll 里面的 DllMain...我们可以通过上面的 SetLabel() 进行任意地址写,修改上图的全局变量 Src,使其指向我们自己实现的动态链接的路径,然后调用对应的虚表函数,使程序流执行到 LoadLibrarExW() 即可...实现一个动态链接 DllMain() 里面写上我们希望以高权限执行代码,然后调用虚表里面对应的函数是 WalletService 的程序流运行到 LoadLibraryEx() 即可。

    76720

    linux动态和静态

    ;nm查看包含那些函数、ar生成静态,查看包含那些.o文件、ldd查看程序依赖的.so文件;gcc/g++与相关的参数-L,-l,-fPIC,-shared;静态链接搜索过程;动态链接...(动态)文件 : 系统加载可执行代码(即文件)的时候,能够知道其所依赖的的名字,但是还需要知道绝对路径,此时就需要系统动态载入器 (dynamic linker/loader)...通常这样做就可以解决无法链接的问题了。 二、静态链接搜索路径的顺序: 1. ld会去找gcc/g++命令的参数-L; 2....四、静态动态链接同时存在,gcc/g++默认链接的是动态一个同时存在静态动态,比如libmysqlclient.a和libmysqlclient.so同时存在:...Linux下,动态和静态同事存在,gcc/g++的链接程序,默认链接动态

    12.4K20

    Linux基础IO【软硬链接与动静态

    答案是不会,大多数人都会通过桌面的快捷方式直接打开文件,而这个快捷方式实际就是对 .exe 的 软链接 文件;当你游戏中加载地图、道具等资源,这些数据是存在 .exe 文件的吗?...答案是当然不是,这些资源文件都以 的方式与 .exe 位于同一目录,通常为动态 Windows 后缀为 dll,那么这些神奇的辅助文件是如何产生的?...安装开发环境 实际上是安装编译器、开发语言配套的和头文件 编译器的 语法提示功能来源于头文件(语法提示其实就是搜索) 我们写代码,开发环境是怎么知道语法错误或其他错误的?.../file/blog/Test_5_3/mylib 环境变量 LD_LIBRARY_PATH 是程序进行动态查找的默认搜索路径 注意: 更改环境变量只是临时方案,重新登录后会失效 方法二:将动态的软链接文件存入系统目录...,都可以随便链接函数(与位置无关) 与位置无关码:动态地址,是偏移量 ---- 5、动态知识补充 同时拥有 静态动态 ,默认采用动态链接 如何指定生成静态链接文件?

    30020

    【Linux】动静态

    首先:我们形成2个共识 我们知道gcc默认使用动态链接(建议选项),动态和静态同时存在,gcc首选的是动态链接。...所以OS和shell也是需要知道哪里的。操作系统,OS寻找相应的有指定的默认路径,但是我的的位置默认路径里吗?这种情况下,就需要我们指明。所以我们怎么告诉操作系统什么位置?...那我们使用静态的函数,程序加载到内存,这些函数的实现方法拷贝到哪里呢?...所以这些实现方法会一直代码区。 4.2动态的加载问题 采用动态的程序使用的方法,会在使用的地方留下一个标记,程序运行以后进行动态链接,会将这个标记替换为动态的地址。...一个动态,真正的映射进地址空间的时候,它的起始地址才能真正确定! 此时动态的方法的地址就等于的地址加上自己在库的偏移量。

    8710

    深入浅出动静态

    对目录进行搜索是一个很常见的事情,但是搜索的目录通过你的软链接,会发生什么?没错,会发生无穷递归问题!   ...不需要动态加载,性能更高。 静态缺点:由于是直接将静态拷贝下来,所以静态文件一般相对很大,如果都采用静态链接将是一个不小的空间消耗。更新维护难,更新相关的程序全部需要重新编译链接。   ...-L选项:需要链接的路径,不加默认C语言搜索。...位置无关码不需要现在知道是什么,本文最后一个话题会有详解,我们只需要知道 编译要带上这个选项 才能进行接下来打包动态的过程。   ...而一个程序想要调用动态,只需要 从地址空间的共享区找到动态的起始虚拟地址,再通过该 虚拟地址 + 偏移量 就可以找到动态需要调用接口的位置了。

    12610

    Linux静态动态加载

    -L:指定文件搜索路径。 -l:指明需要链接文件路径下的哪一个。 注意-l后面接需要去掉的前缀lib和的后缀.so或者.a gcc main.c -I ....这正是共享所要求的,共享加载,在内存的位置不是固定的。  ...我们只是告诉了编译器头文件和动态的位置,编程成可执行程序运行后变成进程,就和编译器无关了,就变成了一个进程,进程操作系统管理,此时操作系统还不知道头文件和动态的位置。...所以我们只需将动态路径放在该配置文件程序执行后,系统就会通过该配置文件找到所需的。...再将这个.conf文件放入/etc/ld.so.conf.d: 此时a.out还是无法链接动态的,因为配置文件只系统刚启动的时候会更新生效给我们的系统配置好,中途修改无法马上修改,所以我们用ldconfig

    16910

    linux下的 lib文件的学习思考

    /lib目录存储着程序运行时使用的共享。通过共享,许多程序可以重复使用相同的代码,并且这些可以存储一个公共的位置上,因此能减小运行程序的大小。这个目录包含程序链接使用的 各种。...ldd test 执行test,可以看到它是如何调用动态的函数的。...(3)应用实例  如果用户想知道系统中有哪些动态链接,或者想知道系统中有没有某个动态链接,可用-p选项让ldconfig输出缓存文件动态链接列表,从而查询得到。...2、搜索文件目录下同时存在该的静态版本和共享版本链接器优先使用共享版本.so,此时你可以使用-static链接选项指定链接静态版本.a。...3、动态可以导出两个特殊的函数:_init和_fini,前者动态加载后调用,后者动态卸载前调用, 我们可以使用这两个函数做些特别的工作。

    2.6K20

    深入浅出链接 | 静态动态

    最后,如果一旦静态文件有代码更新,就需要重新编译链接重新生成整个可执行文件,更新升级麻烦。...Linux系统动态链接的名称通常为 libxxx.so, Windows 系统动态链接的后缀名为 .dll。...( -l 是小写的 L ) 正常情况下,我们指定了要使用的,GCC 会自动标准目录搜索文件,例如在CentOS是 /usr/lib 目录。...静态链接,可执行文件链接知道每一行代码、每一个变量会被放到线性地址空间的什么位置,因此这些地址可以都作为常数写到代码里面。对于动态,只有加载的时候才知道。...配置文件 /etc/ld.so.conf 记录了编译使用的动态链接的路径,默认情况下,编译器只会使用 /lib 和 /usr/lib 这两个目录下的文件,通过这个配置文件可以增加我们自己的动态文件搜索路径

    33210

    【操作系统】动态链接

    使用静态的情况下,在编译链接可执行文件链接器从复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。...动态: 使用动态的时候,往往提供提供两个文件:一个引入库(静态)(LIB)和一个DLL。引入库包含DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。....exe文件运行的时候,系统将为exe分配一个4GB的地址空间,然后加载模块会分析该应用程序的输入信息,从中找到该程序将要访问的动态链接信息。然后在用户的机器上搜索这些动态链接。...如果我们动态链接中使用标准调用约定_stdcall,而在可执行程序中使用动态加载DLL,会发生名字重编,如果知道DLL函数的序号,这时可以使用宏MAKEINTRESOURCE把序号转变成名字。...在编写DLL文件,可以写DLLMAIN也可以不写。 函数原型 // 表示动态链接可以的模块句柄,DLL初次加载,句柄可以通过这个参数传递进来。

    79920

    程序员C语言快速上手——工程篇(十二)

    应用程序可以不知不觉的情况下自动更新,这种技术被称为热更新或热修复,其实质就是我们这一节要介绍的动态。...那么问题来了, 链接如何知道int_div的引用是一个静态符号还是一个动态符号呢? 这实际上就是我们要在编译关联libcalc.dll的原因。...动态中保存了完整的符号信息, 链接解析符号就可以知道int_div是一个定义动态动态符号。这样链接器就可以对int_div的引用做特殊的处理, 使它成为一个对动态符号的引用。...例如int_div在编译地址是0,动态加载动态链接器给他分配的地址是0x100010,这时候动态链接就需要修改动态指令,对int_div符号进行地址重定位。...一个动态两个进程加载, 它的数据段部分会在每个进程中都有独立的副本, 任何一个进程访问的只是自己的那个副本,因此两个进程同时修改动态的全局变量,并不会相互干扰。

    1.3K20

    【Linux】动静态以及动静态链接

    ,网吧里的电脑对该学校里的所有人来说是共享的,谁有需要,谁就能去玩电脑,我们只需要知道网吧在哪里知道自己想要玩的电脑的位置在哪里就行。...理性理解 动态专门让编译器对用户的程序进行动态链接动态链接,只需要拷贝动态中所需要的函数代码地址到自己的可执行程序对性的相关位置即可。...动态链接的优缺点 缺点 我们的程序比较依赖动态动态缺失时,程序便无法运行!就好比网吧被查封后,学校里的同学就算知道网吧的位置,知道自己想要的座位位置也没用!因为网吧已经缺失了!...优点 因为动态共享的,具体的实现方式都是在库,我们的程序只有地址,会很大的节省空间。...理性理解 静态专门让编译器对用户的程序进行静态链接链接,将静态中所需要的完整代码给拷贝到自己的可执行程序内部

    4.9K50

    到底是个啥?为啥要链接链接的本质又是个啥?

    我们可以推出了在编程,一旦一个东西广泛的应用,甚至成为标配,就意味着这个东西一定有种不可替代或者使用面广的的功能。...②的基本构成 ①的最后,我们知道的基本实现原理,那如果我们想手动搞一个简单的呢?  想本质的了解库,我们先来看看编译是如何的。...,.i、.s、.o和最后的可执行文件.exe,而的打包就是Linking(链接)这一步完成的。...操作系统采用虚拟内存机制允许物理内存的一份动态要用到该的所有进程共用,节省了内存和磁盘空间。 二、如何生成 为了方便演示以下用Linux命令行的形式做演示。...但是静态由于编译链接不把的代码链接到可执行文件,而是在运行时,由操作系统从磁盘上的该动态复制到内存动态链接),所以除了我们在生成动态告诉可执行文件的存在,还需要告诉操作系统的存在与路径

    45010

    CTP 看穿式监管版本,收集信息为什么会失败?

    再补充介绍一下,从程序开始执行到期货公司收到采集信息的数据包,一共经历了四个步骤: 1.CTP 动态加载,调用了动态的初始化函数 2.程序调用 CTP->Init 函数 3.程序调用 CTP->ReqAuthenticate...它又是如何对采集的信息加密的? Windows 的 CTP 库函数的 dll(即动态链接) 是不包含符号表的。...因此断点停在 CreateProcessA@40 ,表示已经进入了此函数体,此时 esp 的值为返回地址,esp + 4 的值为 lpApplicationName,esp + 8 的值为 lpCommandLine... Windows ,调用某些系统函数,函数的参数通过栈传递,也就是参数依次入栈,从而在函数体内可以从栈读取这些参数。 调用系统函数,函数的返回地址压栈,从而让函数退出可以找到回去的路。...于是我的电脑中搜索到了 wmic.exe 这个文件的位置,把此位置加入系统环境变量 PATH ,再次执行我的程序,期货公司表示这次成功收到了采集的的系统信息!

    6.4K31
    领券