CN112559067A - 一种动态库加载方法及相关装置 - Google Patents
一种动态库加载方法及相关装置 Download PDFInfo
- Publication number
- CN112559067A CN112559067A CN202011423873.5A CN202011423873A CN112559067A CN 112559067 A CN112559067 A CN 112559067A CN 202011423873 A CN202011423873 A CN 202011423873A CN 112559067 A CN112559067 A CN 112559067A
- Authority
- CN
- China
- Prior art keywords
- dynamic library
- timestamp
- cache
- dynamic
- library file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 102
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000004048 modification Effects 0.000 claims description 60
- 238000012986 modification Methods 0.000 claims description 60
- 230000001419 dependent effect Effects 0.000 claims description 26
- 239000011159 matrix material Substances 0.000 claims description 24
- 238000004458 analytical method Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 abstract description 14
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种动态库加载方法,通过在动态库缓存预先缓存好动态库文件,然后通过时间戳判断动态库缓存中预先缓存的动态库文件是否发生更改,若时间戳一致,则说明动态库文件没有发生更改,可以直接从缓存中读取并使用动态库文件,从而避免在使用动态库文件时反复加载同一版本的动态库文件,而动态库缓存中的动态库文件也可以方便修改,从而使得动态库加载过程兼具性能与灵活性。本发明还提供了一种动态库加载装置、一种动态库加载设备以及一种计算机可读存储介质,同样具有上述有益效果。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种动态库加载方法、一种动态库加载装置、一种动态库加载设备以及一种计算机可读存储介质。
背景技术
在目前众多以C/C++语言为基础的银行核心系统实现中,为提高灵活性,通常将主要的业务逻辑代码编译封装成动态库(DLL),在事务处理开始时根据业务类型加载相应的动态库,之后加载相应的API(Application Programming Interface,应用程序接口)函数进行业务处理,事务处理结束后,再对动态库进行卸载。这种处理方法的优点是升级、业务变更方便灵活,即在对业务逻辑进行变更时,无需要重启应用程序,只需要直接替换相应业务的动态库文件即可;但缺点是,每一笔交易都涉及对应的多个动态库加载以及符号查找,在性能上会造成较大的损耗,而且会造成业务运行时系统态CPU使用率占比极高。根据对某客户实际场景的性能数据分析,极端情况下,30%左右的交易处理时间都消耗在动态库加载上。
而在现阶段,一种简单的改进方法是将动态库改为静态库,即只对相应的业务函数库进行一次加载。这种方法能解决加载性能瓶颈问题,但是牺牲了业务灵活性。后续如果需要对业务进行变更,则必须重启应用程序才能实现。所以如何提供一种兼具性能与灵活性的动态库加载方法是本领域技术人员急需解决的问题。
发明内容
本发明的目的是提供一种动态库加载方法,可以兼具性能与灵活性;本发明的另一目的在于提供一种动态库加载装置、一种动态库加载设备以及一种计算机可读存储介质,可以兼具性能与灵活性。
为解决上述技术问题,本发明提供一种动态库加载方法,包括:
获取动态库加载指令;
根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;
判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;若是,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
可选的,在判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同之后,还包括:
若所述修改时间戳与所述原时间戳不同,则加载所述修改时间戳对应的动态库文件,并将所述动态库缓存加载的动态库文件更新为所述修改时间戳对应的动态库文件。
可选的,还包括:
当所述动态库缓存未更新的时间达到预设时长时,将全部所述原时间戳置0。
可选的,还包括:
当所述动态库文件中的依赖库文件更新时,将全部所述原时间戳置0。
可选的,当所述动态库文件中的依赖库文件更新时,将所述原时间戳置0包括:
获取SIGUSR1信号;所述SIGUSR1信号为所述动态库文件中的依赖库文件更新时所发出的信号;
根据所述SIGUSR1信号将全部所述原时间戳置0。
可选的,还包括:
通过依赖分析模型对全部所述动态库文件进行依赖分析,生成依赖矩阵;
当所述动态库文件中的目标依赖库文件更新时,根据所述依赖矩阵将所述目标依赖库文件对应的主库文件的原时间戳置0。
本发明还提供了一种动态库加载装置,包括:
获取模块:用于获取动态库加载指令;
修改时间戳模块:用于根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;
判断模块:用于判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;
缓存模块:用于若所述修改时间戳与所述原时间戳相同,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
可选的,还包括:
加载模块:用于若所述修改时间戳与所述原时间戳不同,则加载所述修改时间戳对应的动态库文件,并将所述动态库缓存加载的动态库文件更新为所述修改时间戳对应的动态库文件。
本发明还提供了一种动态库加载设备,所述设备包括:
存储器:用于存储计算机程序;
处理器:用于执行所述计算机程序时实现如上述任一项所述动态库加载方法的步骤。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述动态库加载方法的步骤。
本发明所提供的一种动态库加载方法,包括获取动态库加载指令;根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;若是,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
通过在动态库缓存预先缓存好动态库文件,然后通过时间戳判断动态库缓存中预先缓存的动态库文件是否发生更改,若时间戳一致,则说明动态库文件没有发生更改,可以直接从缓存中读取并使用动态库文件,从而避免在使用动态库文件时反复加载同一版本的动态库文件,而动态库缓存中的动态库文件也可以方便修改,从而使得动态库加载过程兼具性能与灵活性。
本发明还提供了一种动态库加载装置、一种动态库加载设备以及一种计算机可读存储介质,同样具有上述有益效果,在此不再进行赘述。
附图说明
为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的一种动态库加载方法的流程图;
图2为本发明实施例所提供的一种具体的动态库加载方法的流程图;
图3为本发明实施例所提供的一种动态库加载装置的结构框图;
图4为本发明实施例所提供的一种动态库加载设备的结构框图。
具体实施方式
本发明的核心是提供一种动态库加载方法。在现有技术中,为提高灵活性,通常将主要的业务逻辑代码编译封装成动态库,在事务处理开始时根据业务类型加载相应的动态库,之后加载相应的API函数进行业务处理,事务处理结束后,再对动态库进行卸载,在性能上会造成较大的损耗。
而本发明所提供的一种动态库加载方法,包括获取动态库加载指令;根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;若是,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
通过在动态库缓存预先缓存好动态库文件,然后通过时间戳判断动态库缓存中预先缓存的动态库文件是否发生更改,若时间戳一致,则说明动态库文件没有发生更改,可以直接从缓存中读取并使用动态库文件,从而避免在使用动态库文件时反复加载同一版本的动态库文件,而动态库缓存中的动态库文件也可以方便修改,从而使得动态库加载过程兼具性能与灵活性。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例所提供的一种动态库加载方法的流程图。
参见图1,在本发明实施例中,动态库加载方法包括:
S101:获取动态库加载指令。
在本步骤中,会获取用户输入的动态库加载指令,以便根据该动态库加载指令执行下述流程。有关动态库加载指令的具体内容可以根据实际情况自行设置,在此不做具体限定。
S102:根据动态库加载指令获取动态库文件的修改时间戳。
在本发明实施例中,所述修改时间戳为所述动态库文件被修改时设置的时间戳,该修改时间戳可以表明动态库文件被修改的时间。
在本步骤中,具体用于获取动态库文件的修改时间戳,以便在后续步骤中根据该修改时间戳判断动态库文件是否有被篡改。在本发明实施例中具体可以封装动态库加载函数调用接口,在业务动态库加载时,通过系统API的stat函数读取动态库文件的修改时间戳,而动态库文件自身有最近修改时间属性mtime,其保存着动态库文件上一次修改的时间。
S103:判断修改时间戳与动态库缓存里记录的原时间戳是否相同。
在本发明实施例中,预先设置有动态库缓存,即增加有DLL Cache数据结构,并在该动态库缓存中对动态库文件的加载进行缓存。该动态库缓存中记录的主要字段通常包括动态库名、动态库句柄、以及修改时间戳。而该动态库缓存的缓存表具体可以采用哈希方式存储,例如STL(Standard Template Library,标准模板库)中的hash_map方式,或者数组方式存储等均可,在本发明实施例中不做具体限定。
在本发明实施例中,所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。上述动态库缓存里记录的原时间戳,可以表明动态库缓存中缓存的动态库文件的修改时间,进而在本步骤中可以通过将S102中获取的修改时间戳与本步骤中获取的原时间戳进行比对。若比对结果为相同,即若修改时间戳与动态库缓存里记录的原时间戳相同,则说明此次想要加载的动态库文件以及预先加载在动态库缓存中,可以直接调用,即执行下述S104。
S104:若修改时间戳与动态库缓存里记录的原时间戳相同,则返回动态库缓存里记录的动态库句柄。
在本步骤中,需要返回动态库缓存里记录的动态库句柄,以表明动态库文件加载完成。
本发明实施例所提供的一种动态库加载方法,包括获取动态库加载指令;根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;若是,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
通过在动态库缓存预先缓存好动态库文件,然后通过时间戳判断动态库缓存中预先缓存的动态库文件是否发生更改,若时间戳一致,则说明动态库文件没有发生更改,可以直接从缓存中读取并使用动态库文件,从而避免在使用动态库文件时反复加载同一版本的动态库文件,而动态库缓存中的动态库文件也可以方便修改,从而使得动态库加载过程兼具性能与灵活性。
有关本发明所提供的一种动态库加载方法的具体内容将在下述发明实施例中做详细介绍。
请参考图2,图2为本发明实施例所提供的一种具体的动态库加载方法的流程图。
参见图2,在本发明实施例中,动态库加载方法包括:
S201:获取动态库加载指令。
S202:根据动态库加载指令获取动态库文件的修改时间戳。
S203:判断修改时间戳与动态库缓存里记录的原时间戳是否相同。
S204:若修改时间戳与动态库缓存里记录的原时间戳相同,则返回动态库缓存里记录的动态库句柄。
上述S201至S204与上述发明实施例中S101至S104基本一致,详细内容请参考上述发明实施例,在此不再进行赘述。
S205:若修改时间戳与原时间戳不同,则加载修改时间戳对应的动态库文件,并将动态库缓存加载的动态库文件更新为修改时间戳对应的动态库文件。
若上述S203的判断的结果为否,即表明当前需要加载的动态库文件,与动态库缓存中缓存的动态库文件并不相同,通常情况下,上述修改时间戳会在上述原时间戳之后,即当前需要加载的动态库文件通常为在动态库缓存中缓存有上一版本的动态库文件之后,又经过更新的动态库文件。因此在本步骤中,需要加载上述修改时间戳对应的动态库文件,即更新后的动态库文件。同时,在本步骤中需要将动态库缓存加载的动态库文件更新为修改时间戳对应的动态库文件,即重新缓存当前更新过后的动态库文件,以便下次可以直接从动态库缓存中直接调用该动态库文件。
需要说明的是,在本步骤中具体会返回上述修改时间戳对应的动态库文件的动态库句柄,以表明动态库文件加载完成。
S206:当动态库缓存未更新的时间达到预设时长时,将全部原时间戳置0。
需要说明的是,本步骤与上述S201至S205通常由不同的线程并行执行,而本步骤与下述步骤中主要用于保证动态库缓存内缓存的动态库文件可以及时被更新。具体的,在本发明实施例中会实时记录动态库缓存未更新的时间。而之后当该动态库缓存未更新的时间达到预设时长时,例如达到5min未更新时,会将动态库缓存中缓存的全部动态库文件对应的原时间戳置0,以保证在下次执行上述流程时,可以依据S205将动态库缓存内缓存的动态库文件更新,强制重新加载以及重新缓存动态库文件。
S207:当动态库文件中的依赖库文件更新时,将全部原时间戳置0。
在实际情况中,动态库文件分为两类,一类是应用中直接调用到的DLL动态库文件,该动态库文件通常称之为业务主库文件;另一类是这些主库文件所依赖的其他DLL动态库文件,该动态库文件通常称之为依赖库文件。而在实际情况中,如果只更新了依赖库文件,没有更新业务主库文件,默认不会触发重新加载,因为其不会更改动态库文件的修改时间戳。此时需要等待超时间隔,即执行上述S206才能重新加载动态库文件。为了及时实现动态库缓存中动态库文件的更新,在本步骤中会在当动态库文件中的依赖库文件更新时,直接将全部原时间戳置0,以保证在下次执行上述流程时,可以依据S205将动态库缓存内缓存的动态库文件更新,强制重新加载以及重新缓存动态库文件。
具体的,本步骤通常可以具体包括:获取SIGUSR1信号;所述SIGUSR1信号为所述动态库文件中的依赖库文件更新时所发出的信号;根据所述SIGUSR1信号将全部所述原时间戳置0。即在本步骤中,具体可以通过异步信号,即SIGUSR1信号实现动态库缓存中动态库文件的重新加载。具体的,可以在上述依赖库文件更新时,发送出SIGUSR1信号,之后在获取到该SIGUSR1信号之后,将全部原时间戳置0,以保证在下次执行上述流程时,可以依据S205将动态库缓存内缓存的动态库文件更新,强制重新加载以及重新缓存动态库文件。
需要说明的是,本步骤通常适用于动态库文件数量较小的情况,或者说是需要更新的依赖库文件占全部动态库文件比例较大的情况下执行,可以具有较高的执行效率。若动态库文件数量较大,或者说需要更新的依赖库文件占全部动态库文件比例较小时,通常会执行下述S208至S209实现动态库缓存的更新。
S208:通过依赖分析模型对全部动态库文件进行依赖分析,生成依赖矩阵。
上述依赖分析模型通常为Linux环境中的objdump,或AIX环境中的dump,其可以通过依赖分析算法将生成依赖矩阵。其算法具体如下:
S1:对所有的动态库文件按名称从1到N进行排序,再组成一个N×N的矩阵matrix,将该矩阵置0;
S2:从1到N,依序分析每个动态库文件,例如动态库文件libX,其中X≥1,且≤N;如果libX依赖libY,则置matrix[Y][X]=1;
S3:遍历N×N矩阵matrix,如果matrix[P][Q]=1,则Q依赖P,matrix[P]=matrix[P]|matrix[Q];
S4:重复步骤S3,直到一轮遍历中,矩阵值不再变化为止,此时可以将该矩阵作为依赖矩阵,由此可以得到lib1到libN的依赖关系。
S209:当动态库文件中的目标依赖库文件更新时,根据依赖矩阵将目标依赖库文件对应的主库文件的原时间戳置0。
在本步骤中,会依据上述S208中得到的依赖矩阵针对性的将动态库缓存中对应变化的依赖矩阵的原时间戳置0。例如如果升级libX,则matrix[X]行中对应取值为1的所有libY都需要更新。而在本步骤中可以自动对这些上述相关动态库文件的原时间戳置0,以保证在下次执行上述流程时,可以依据S205将动态库缓存内缓存的动态库文件更新,强制重新加载以及重新缓存动态库文件。
需要说明的是,在本发明实施例中需要对动态库卸载代码进行更改,应为本发明实施例中大部分场景不需要卸载动态库文件,而只需要在特定场景,比如进程退出时卸载,此时通常需要清除动态库缓存表项。
本发明实施例所提供的一种动态库加载方法,通过在动态库缓存预先缓存好动态库文件,然后通过时间戳判断动态库缓存中预先缓存的动态库文件是否发生更改,若时间戳一致,则说明动态库文件没有发生更改,可以直接从缓存中读取并使用动态库文件,从而避免在使用动态库文件时反复加载同一版本的动态库文件,而动态库缓存中的动态库文件也可以方便修改,从而使得动态库加载过程兼具性能与灵活性。
下面对本发明实施例所提供的一种动态库加载装置进行介绍,下文描述的动态库加载装置与上文描述的动态库加载方法可相互对应参照。
请参考图3,图3为本发明实施例所提供的一种动态库加载装置的结构框图。
参见图3,在本发明实施例中,动态库加载装置可以包括:
获取模块100:用于获取动态库加载指令。
修改时间戳模块200:用于根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳。
判断模块300:用于判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同。
缓存模块400:用于若所述修改时间戳与所述原时间戳相同,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
作为优选的,在本发明实施例中,还包括:
加载模块:用于若所述修改时间戳与所述原时间戳不同,则加载所述修改时间戳对应的动态库文件,并将所述动态库缓存加载的动态库文件更新为所述修改时间戳对应的动态库文件。
作为优选的,在本发明实施例中,还包括:
限时更新模块:用于当所述动态库缓存未更新的时间达到预设时长时,将全部所述原时间戳置0。
作为优选的,在本发明实施例中,还包括:
第一依赖库更新模块:用于当所述动态库文件中的依赖库文件更新时,将全部所述原时间戳置0。
作为优选的,在本发明实施例中,第一依赖库更新模块包括:
异步信号获取单元:用于获取SIGUSR1信号;所述SIGUSR1信号为所述动态库文件中的依赖库文件更新时所发出的信号;
更新单元:用于根据所述SIGUSR1信号将全部所述原时间戳置0。
作为优选的,在本发明实施例中,还包括:
依赖矩阵模块:用于通过依赖分析模型对全部所述动态库文件进行依赖分析,生成依赖矩阵。
第二依赖库更新模块:用于当所述动态库文件中的目标依赖库文件更新时,根据所述依赖矩阵将所述目标依赖库文件对应的主库文件的原时间戳置0。
本实施例的动态库加载装置用于实现前述的动态库加载方法,因此动态库加载装置中的具体实施方式可见前文中动态库加载方法的实施例部分,例如,获取模块100,修改时间戳模块200,判断模块300,缓存模块400分别用于实现上述动态库加载方法中步骤S101至S104,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
下面对本发明实施例提供的一种动态库加载设备进行介绍,下文描述的动态库加载设备与上文描述的动态库加载方法以及动态库加载装置可相互对应参照。
请参考图4,图4为本发明实施例所提供的一种动态库加载设备的结构框图。
参照图4,该动态库加载设备可以包括处理器11和存储器12。
所述存储器12用于存储计算机程序;所述处理器11用于执行所述计算机程序时实现上述发明实施例中所述的动态库加载方法。
本实施例的动态库加载设备中处理器11用于安装上述发明实施例中所述的动态库加载装置,同时处理器11与存储器12相结合可以实现上述任一发明实施例中所述的动态库加载方法。因此动态库加载设备中的具体实施方式可见前文中的动态库加载方法的实施例部分,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一发明实施例中所介绍的一种动态库加载方法。其余内容可以参照现有技术,在此不再进行展开描述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种动态库加载方法、一种动态库加载装置、一种动态库加载设备以及一种计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (10)
1.一种动态库加载方法,其特征在于,包括:
获取动态库加载指令;
根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;
判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;若是,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
2.根据权利要求1所述的方法,其特征在于,在判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同之后,还包括:
若所述修改时间戳与所述原时间戳不同,则加载所述修改时间戳对应的动态库文件,并将所述动态库缓存加载的动态库文件更新为所述修改时间戳对应的动态库文件。
3.根据权利要求2所述的方法,其特征在于,还包括:
当所述动态库缓存未更新的时间达到预设时长时,将全部所述原时间戳置0。
4.根据权利要求2所述的方法,其特征在于,还包括:
当所述动态库文件中的依赖库文件更新时,将全部所述原时间戳置0。
5.根据权利要求4所述的方法,其特征在于,当所述动态库文件中的依赖库文件更新时,将所述原时间戳置0包括:
获取SIGUSR1信号;所述SIGUSR1信号为所述动态库文件中的依赖库文件更新时所发出的信号;
根据所述SIGUSR1信号将全部所述原时间戳置0。
6.根据权利要求2所述的方法,其特征在于,还包括:
通过依赖分析模型对全部所述动态库文件进行依赖分析,生成依赖矩阵;
当所述动态库文件中的目标依赖库文件更新时,根据所述依赖矩阵将所述目标依赖库文件对应的主库文件的原时间戳置0。
7.一种动态库加载装置,其特征在于,包括:
获取模块:用于获取动态库加载指令;
修改时间戳模块:用于根据所述动态库加载指令获取动态库文件的修改时间戳;所述修改时间戳为所述动态库文件被修改时设置的时间戳;
判断模块:用于判断所述修改时间戳与动态库缓存里记录的原时间戳是否相同;
缓存模块:用于若所述修改时间戳与所述原时间戳相同,则返回所述动态库缓存里记录的动态库句柄;所述动态库缓存加载有动态库文件,所述原时间戳为所述动态库缓存加载的动态库文件被修改时设置的时间戳。
8.根据权利要求7所述的装置,其特征在于,还包括:
加载模块:用于若所述修改时间戳与所述原时间戳不同,则加载所述修改时间戳对应的动态库文件,并将所述动态库缓存加载的动态库文件更新为所述修改时间戳对应的动态库文件。
9.一种动态库加载设备,其特征在于,所述设备包括:
存储器:用于存储计算机程序;
处理器:用于执行所述计算机程序时实现如权利要求1至6任一项所述动态库加载方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述动态库加载方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011423873.5A CN112559067A (zh) | 2020-12-08 | 2020-12-08 | 一种动态库加载方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011423873.5A CN112559067A (zh) | 2020-12-08 | 2020-12-08 | 一种动态库加载方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112559067A true CN112559067A (zh) | 2021-03-26 |
Family
ID=75059639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011423873.5A Pending CN112559067A (zh) | 2020-12-08 | 2020-12-08 | 一种动态库加载方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559067A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114528037A (zh) * | 2021-12-31 | 2022-05-24 | 北京达佳互联信息技术有限公司 | 一种应用启动方法、装置、电子设备及存储介质 |
WO2022206254A1 (zh) * | 2021-03-29 | 2022-10-06 | 北京字节跳动网络技术有限公司 | so文件的修复方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009083732A1 (en) * | 2007-12-31 | 2009-07-09 | Symbian Software Limited | Preloading dynamic link libraries |
CN108255537A (zh) * | 2017-06-20 | 2018-07-06 | 广州华多网络科技有限公司 | 一种dll基地址优化方法、系统及应用程序加载方法、系统 |
CN108427571A (zh) * | 2018-02-07 | 2018-08-21 | 深圳市雁联计算系统有限公司 | 一种动态链接库更新方法及服务器 |
CN109189496A (zh) * | 2018-08-03 | 2019-01-11 | 平安科技(深圳)有限公司 | 应用程序的动态库信息获取方法及装置 |
CN109379215A (zh) * | 2018-09-26 | 2019-02-22 | 郑州云海信息技术有限公司 | 一种网卡固件更新方法、装置及设备 |
CN109445856A (zh) * | 2018-09-17 | 2019-03-08 | 深圳点猫科技有限公司 | 一种基于教育系统的加速应用启动的方法及电子设备 |
CN110764778A (zh) * | 2019-10-21 | 2020-02-07 | 深圳市珍爱捷云信息技术有限公司 | 应用构建中的预编译方法、装置、设备及存储介质 |
CN111046377A (zh) * | 2019-12-25 | 2020-04-21 | 五八同城信息技术有限公司 | 加载动态链接库的方法、装置、电子设备及存储介质 |
CN111104178A (zh) * | 2018-10-26 | 2020-05-05 | 武汉斗鱼网络科技有限公司 | 一种动态库加载方法、终端装置及存储介质 |
-
2020
- 2020-12-08 CN CN202011423873.5A patent/CN112559067A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009083732A1 (en) * | 2007-12-31 | 2009-07-09 | Symbian Software Limited | Preloading dynamic link libraries |
CN108255537A (zh) * | 2017-06-20 | 2018-07-06 | 广州华多网络科技有限公司 | 一种dll基地址优化方法、系统及应用程序加载方法、系统 |
CN108427571A (zh) * | 2018-02-07 | 2018-08-21 | 深圳市雁联计算系统有限公司 | 一种动态链接库更新方法及服务器 |
CN109189496A (zh) * | 2018-08-03 | 2019-01-11 | 平安科技(深圳)有限公司 | 应用程序的动态库信息获取方法及装置 |
CN109445856A (zh) * | 2018-09-17 | 2019-03-08 | 深圳点猫科技有限公司 | 一种基于教育系统的加速应用启动的方法及电子设备 |
CN109379215A (zh) * | 2018-09-26 | 2019-02-22 | 郑州云海信息技术有限公司 | 一种网卡固件更新方法、装置及设备 |
CN111104178A (zh) * | 2018-10-26 | 2020-05-05 | 武汉斗鱼网络科技有限公司 | 一种动态库加载方法、终端装置及存储介质 |
CN110764778A (zh) * | 2019-10-21 | 2020-02-07 | 深圳市珍爱捷云信息技术有限公司 | 应用构建中的预编译方法、装置、设备及存储介质 |
CN111046377A (zh) * | 2019-12-25 | 2020-04-21 | 五八同城信息技术有限公司 | 加载动态链接库的方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
张晓龙: "辽宁联通BSS系统总体架构及计费账务系统的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022206254A1 (zh) * | 2021-03-29 | 2022-10-06 | 北京字节跳动网络技术有限公司 | so文件的修复方法、装置、设备及存储介质 |
CN114528037A (zh) * | 2021-12-31 | 2022-05-24 | 北京达佳互联信息技术有限公司 | 一种应用启动方法、装置、电子设备及存储介质 |
CN114528037B (zh) * | 2021-12-31 | 2024-03-12 | 北京达佳互联信息技术有限公司 | 一种应用启动方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105867947B (zh) | 预置应用程序升级后的数据处理方法及装置 | |
CN112559067A (zh) | 一种动态库加载方法及相关装置 | |
US20140149996A1 (en) | Runtime emulating static thread local storage of portable executable software code | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
CN111694733A (zh) | 一种软件开发工具包sdk的api测试方法以及测试装置 | |
CN112306486B (zh) | 一种界面生成方法、装置、服务器及存储介质 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
CN113495728A (zh) | 依赖关系确定方法、装置、电子设备及介质 | |
CN112748905B (zh) | 基础库的初始化调用方法、装置、电子设备及存储介质 | |
CN110851117B (zh) | 一键导入静态库到项目的方法、存储介质 | |
CN108446144B (zh) | 一种应用程序启动方法、装置、终端及存储介质 | |
CN108595335B (zh) | 测试环境部署方法、部署装置及存储介质 | |
CN116048609A (zh) | 配置文件更新方法、装置、计算机设备和存储介质 | |
CN111897821B (zh) | 一种pg数据库的自动化表分区方法及相关装置 | |
CN112286684B (zh) | 一种内存使用量控制方法、装置、设备及介质 | |
CN113377382A (zh) | 一种软件安装包的处理方法、装置、电子设备及存储介质 | |
CN109408547B (zh) | 一种sam注册表的读取方法、读取系统及相关装置 | |
CN112579129A (zh) | 基于服务器的软件更新方法、装置、设备及存储介质 | |
JPH03184123A (ja) | デジタルデータプロセッサのための手続き状態記述子システム | |
CN106897089B (zh) | 系统操作执行方法及装置 | |
JP2008059494A (ja) | ミドルウェア選択制御装置 | |
CN111399846B (zh) | 一种安卓手机应用程序容量监控方法及装置 | |
US11896899B1 (en) | Techniques for providing network applications | |
CN110377326B (zh) | 安装包生成方法、装置、开发设备和计算机可读介质 | |
CN115421785B (zh) | 应用程序的移植处理方法、装置和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210326 |
|
RJ01 | Rejection of invention patent application after publication |