CN110471690B - 动态链接库so文件的加载方法、装置及存储介质 - Google Patents
动态链接库so文件的加载方法、装置及存储介质 Download PDFInfo
- Publication number
- CN110471690B CN110471690B CN201910557353.4A CN201910557353A CN110471690B CN 110471690 B CN110471690 B CN 110471690B CN 201910557353 A CN201910557353 A CN 201910557353A CN 110471690 B CN110471690 B CN 110471690B
- Authority
- CN
- China
- Prior art keywords
- file
- port
- dynamic link
- library
- library function
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/656—Updates while running
-
- 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/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例涉及一种动态链接库SO文件的加载方法及、装置及存储介质;所述方法,应用于GO语言服务器中的应用程序,包括:当接收到访问请求时,确定接收所述访问请求的端口;判断所述端口是否为动态链接库SO文件更新端口;若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件。如此通过以预设的方式在GO语言服务器中应用程序设置程序代码,与所述GO语言服务器中应用程序相互独立运行,调用本地预先配置的程序代码,加载用户输入的目标动态链接库SO文件,无需停止应用程序的运行,无需重启应用程序,可以动态实现动态链接库SO文件的热加载。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种动态链接库SO文件的加载方法及、装置及存储介质。
背景技术
动态链接库SO文件,是指linux平台下文件名以.so结尾的文件,里面包含有完成某一特定服务的函数。为了便于管理众多的动态链接库SO文件,可以将动态链接库SO文件存储于服务器中,例如GO语言服务器。针对GO语言服务器,可以向用户提供动态链接库SO文件的调用功能。
目前由于动态链接库SO文件需要进行版本升级,需要将最新的动态链接库SO文件加载至GO语言服务器,将GO语言服务器中的动态链接库SO文件替换为最新的动态链接库SO文件。
现有技术中,在对GO语言服务器中动态链接库SO文件进行版本升级的过程中,加载动态链接库SO文件的实现方式为:将动态链接库SO文件引入至应用程序中工程代码,在应用程序工程代码中编译动态链接库SO文件。如此在GO语言服务器中对动态链接库SO文件进行版本升级的过程中,需要停止应用程序的运行,然后重启应用程序。
发明内容
鉴于此,为解决现有技术中在对动态链接库SO文件进行版本升级的过程中,需要停止应用程序的运行,然后重启应用程序的技术问题,本发明实施例提供一种动态链接库SO文件的加载方法及、装置及存储介质。
第一方面,本发明实施例提供一种动态链接库SO文件的加载方法,包括:
当接收到访问请求时,确定接收所述访问请求的端口;
判断所述端口是否为动态链接库SO文件更新端口;
若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,所述程序代码采用预设的方式设置于所述应用程序中。
在一个可能的实施方式中,所述程序代码采用预设的方式设置于所述应用程序中,包括:
以注释的方式在所述GO语言服务器中的应用程序引入程序代码。
在一个可能的实施方式中,所述方法还包括:
从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中;
将库函数指针指向的地址设置为所述缓存地址;
向用户返回动态链接库SO文件的更新结果。
在一个可能的实施方式中,所述将库函数指针指向的地址设置为所述缓存地址,包括:
对所述库函数指针加锁;
在所述库函数指针加锁的过程中,将库函数指针指向的地址设置为所述缓存地址;
在对所述库函数指针指向的地址进行修改后,对所述库函数指针解锁。
在一个可能的实施方式中,所述方法还包括:
若接收所述访问请求的端口非动态链接库SO文件更新端口,则判断接收所述访问请求的端口是否为动态链接库SO文件调用端口;
若接收所述访问请求的端口为动态链接库SO文件调用端口,则获取库函数指针;
根据所述访问请求,确定库函数指针指向的地址;
获取所述库函数指针指向的地址对应的库函数,并返回给用户。
在一个可能的实施方式中,所述获取所述库函数指针指向的地址对应的库函数,并返回给用户,包括:
对所述库函数指针加锁;
在所述库函数指针加锁的过程中,获取所述库函数指针指向的地址对应的库函数,并返回给用户;
在获取所述库函数指针指向的地址对应的库函数后,对所述库函数指针解锁。
在一个可能的实施方式中,所述当接收到用户输入的访问请求时,确定接收所述访问请求的端口,包括:
按照预设的监测周期,监测动态链接库SO文件更新端口以及动态链接库SO文件调用端口是否接收到用户输入的访问请求;
当接收到用户输入的访问请求时,确定接收所述访问请求的端口。
第二方面,本发明实施例提供一种动态链接库SO文件的加载装置,其特征在于,所述装置包括:
端口确定模块,用于当接收到访问请求时,确定接收所述访问请求的端口;
判断模块,用于判断所述端口是否为动态链接库SO文件更新端口;
文件加载模块,用于若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,所述程序代码采用预设的方式设置于所述应用程序中。
第三方面,本发明实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如前述的动态链接库SO文件的加载方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前述的动态链接库SO文件的加载方法。
本发明实施例提供的技术方案,通过以预设的方式在GO语言服务器中应用程序设置程序代码,与所述GO语言服务器中的应用程序相互独立运行,当接收到访问请求时,确定接收所述访问请求的端口,判断所述端口是否为动态链接库SO文件更新端口,若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件。如此通过以预设的方式在GO语言服务器中应用程序设置程序代码,与所述GO语言服务器中应用程序相互独立运行,调用本地预先配置的程序代码,加载用户输入的目标动态链接库SO文件,无需停止应用程序的运行,无需重启应用程序,可以动态实现动态链接库SO文件的热加载。
附图说明
图1是本发明实施例提供的一种动态链接库SO文件的加载方法的流程示意图;
图2是本发明实施例提供的另一种动态链接库SO文件的加载方法的流程示意图;
图3是本发明实施例的一种动态链接库SO文件的加载装置的结构示意图;
图4是本发明实施例的用于配置本发明实施例装置的一种设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为便于对本发明实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本发明实施例的限定。
在对本发明实施例提供的技术方案进行说明之前,首先对本发明实施例技术方案的原理进行解释说明:
在本发明实施例中,为了解决现有技术中动态链接库SO文件不能热加载(热加载是应用程序运行时重新加载动态链接库SO文件以更新服务)的问题,在GO语言服务器中的应用程序,以预设的方式引入程序代码,所述程序代码用于加载动态链接库SO文件,与所述GO语言服务器中应用程序相互独立运行。
具体可以以注释的方式在所述GO语言服务器中的应用程序引入程序代码,如此并不会影响所述GO语言服务器中应用程序的运行,可以实现动态链接库SO文件的热加载。意味着在源代码中以注释的方式引入程序代码。
例如,在GO语言服务器中应用程序内嵌C语言的程序代码,利用C语言自身能够加载动态链接库SO文件的特性,来实现go语言也能加载动态链接库SO文件。
上述C语言的程序代码中,可以包括“dlopen”函数以及“dlsym”函数,在linux平台下可以用“dlopen”函数来实现动态链接库SO文件的加载。“dlopen”函数:在dlopen()函数以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程,
在之后再利用“dlsym”函数,从动态链接库SO文件中获取指定的库函数存储到内存中,并返回库函数的缓存地址。“dlsym”函数:根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的地址。使用这个函数不但可以获取函数地址,也可以获取变量地址。handle:由dlopen打开动态链接库后返回的指针;symbol:要求获取的函数或全局变量的名称。
后续,在动态链接库SO文件热加载的过程中,只需要修改库函数指针指向的地址,让它指向目标库函数的缓存地址即可。
如图1所示,为本发明实施例所提供的一种动态链接库SO文件的加载方法的实施流程图,应用于GO语言服务器中的应用程序,所述方法具体可以包括以下步骤:
S101,当接收到访问请求时,确定接收所述访问请求的端口。
在本发明实施例中,对于GO语言服务器,其目的之一是向用户提供动态链接库SO文件中库函数的调用功能,其目的之二是供用户对动态链接库SO文件进行升级管理。故在本发明实施例中,至少提供两个端口,其中一个端口为动态链接库SO文件更新端口,另一个端口为动态链接库SO文件调用端口。
针对动态链接库SO文件更新端口以及动态链接库SO文件调用端口,在本发明实施例中,按照预设的监测周期,监测是否接收到用户输入的访问请求,当接收到用户输入的访问请求时,确定接收所述访问请求的端口,即确定接收所述访问请求的端口为动态链接库SO文件更新端口,或者为动态链接库SO文件调用端口。
例如,每间隔一分钟,针对动态链接库SO文件更新端口以及动态链接库SO文件调用端口,监测是否接收到用户输入的访问请求,当接收到用户输入的访问请求时,确定接收所述访问请求的端口为动态链接库SO文件更新端口。
S102,判断所述端口是否为动态链接库SO文件更新端口。
针对上述S101中所确定的端口,判断接收所述访问请求的端口是否为动态链接库SO文件更新端口。
如果接收所述访问请求的端口为动态链接库SO文件更新端口,则可以确定用户要对动态链接库SO文件进行版本升级。
如果接收所述访问请求的端口不是动态链接库SO文件更新端口,则可以确定用户不是对动态链接库SO文件进行版本升级。
S103,若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件。
如果接收所述访问请求的端口为动态链接库SO文件更新端口,则可以确定用户要对动态链接库SO文件进行版本升级,可以调用本地预先配置的程序代码,加载用户输入的目标动态链接库SO文件,以此完成对动态链接库SO文件的版本升级。
在对所述用户输入的目标动态链接库SO文件加载完成之后,从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中,即利用上述所说的“dlsym”函数,从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中,可以返回缓存地址。
对于公共资源“库函数指针”,将库函数指针指向的地址设置为所述缓存地址,以使所述库函数指针指向所述目标库函数的缓存地址,向用户返回动态链接库SO文件的更新结果,后续用户可以调用该目标库函数。
其中,在上述将库函数指针指向的地址设置为所述缓存地址,以使所述库函数指针指向所述目标库函数的缓存地址的过程中,可以对所述库函数指针加锁,具体可以是加写请求锁,在所述库函数指针加锁的过程中,将库函数指针指向的地址设置为所述缓存地址,以使所述库函数指针指向所述目标库函数的缓存地址,在对所述库函数指针指向的地址进行修改之后,对所述库函数指针解锁。
上述描述的是本发明实施例对于用于对动态链接库SO文件进行版本升级的情况,另外对于用于调用动态链接库SO文件中库函数的情况,本发明实施例提供下列技术方案:
在上述方案的基础之上,具体参照图2,示出了本实施例提供的另一种动态链接库SO文件的加载方法的流程示意图,在如图1所示方法的基础上,本发明实施例还可以包括以下步骤:
若端口为动态链接库SO文件更新端口,则执行S103;若端口非动态链接库SO文件更新端口,则执行S104-S107。
S104,若接收所述访问请求的端口非动态链接库SO文件更新端口,则判断接收所述访问请求的端口是否为动态链接库SO文件调用端口。
如果接收所述访问请求的端口不是动态链接库SO文件更新端口,则可以确定用户不是对动态链接库SO文件进行版本升级,用户有可能是对动态链接库SO文件中库函数进行调用。
在接收所述访问请求的端口不是动态链接库SO文件更新端口的情况下,进一步判断接收所述访问请求的端口是否为动态链接库SO文件调用端口。
如果接收所述访问请求的端口为动态链接库SO文件调用端口,则可以确定用户对动态链接库SO文件中库函数进行调用。
S105,若接收所述访问请求的端口为动态链接库SO文件调用端口,则获取库函数指针。
如果接收所述访问请求的端口为动态链接库SO文件调用端口,对于公共资源“库函数指针”,可以获取库函数指针。
S106,根据所述访问请求,确定库函数指针指向的地址。
如果接收所述访问请求的端口为动态链接库SO文件调用端口,则可以确定用户对动态链接库SO文件中库函数进行调用,此时需要确定用户需要调用哪个库函数,因此可以根据所述访问请求,确定库函数指针指向的地址,其中所述访问请求中携带库函数标识,所述库函数标识用于确定用户需要调用的库函数。
例如,用户需要调用库函数A,所述访问请求中携带库函数标识A,可以根据所述访问请求确定库函数A,进一步确定库函数A的存储地址,即库函数指针指向的地址。
S107,获取所述库函数指针指向的地址对应的库函数,并返回给用户。
对于所确定的库函数指针指向的地址,获取所述库函数指针指向的地址对应的库函数,并返回给用户。
其中,在获取所述库函数指针指向的地址对应的库函数,并返回给用户的过程中,对所述库函数指针加锁,具体可以是读请求锁,在所述库函数指针加锁的过程中,获取所述库函数指针指向的地址对应的库函数,并返回给用户,在获取所述库函数指针指向的地址对应的库函数之后,对所述库函数指针解锁,如此可以实现用户对动态链接库SO文件中库函数的调用功能。
通过上述对本发明提供的技术方案的描述,通过以预设的方式在GO语言服务器中应用程序设置程序代码,与所述GO语言服务器中的应用程序相互独立运行,当接收到用户输入的访问请求时,确定接收所述访问请求的端口,判断所述端口是否为动态链接库SO文件更新端口,若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载用户输入的目标动态链接库SO文件。如此通过以预设的方式在GO语言服务器中应用程序设置程序代码,与所述GO语言服务器中应用程序相互独立运行,调用本地预先配置的程序代码,加载用户输入的目标动态链接库SO文件,无需停止应用程序的运行,无需重启应用程序,可以动态实现动态链接库SO文件的热加载。
相对于上述方法实施例,本发明实施例还提供了一种动态链接库SO文件的加载装置,应用于GO语言服务器中的应用程序,如图3所示,所述装置可以包括:端口确定模块310、判断模块320、文件加载模块330。
端口确定模块310,用于当接收到访问请求时,确定接收所述访问请求的端口;
判断模块320,用于判断所述端口是否为动态链接库SO文件更新端口;
文件加载模块330,用于若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,所述程序代码采用预设的方式设置于所述应用程序中。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
图4为本发明实施例提供的一种的计算机设备的结构示意图,图4所示的计算机设备400包括:至少一个处理器401、存储器402、至少一个网络接口404和其他用户接口403。移动终端400中的各个组件通过总线系统405耦合在一起。可理解,总线系统405用于实现这些组件之间的连接通信。总线系统405除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线系统405。
其中,用户接口403可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。
可以理解,本发明实施例中的存储器402可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-OnlyMemory,ROM)、可编程只读存储器(ProgrammableROM,PROM)、可擦除可编程只读存储器(ErasablePROM,EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(RandomAccessMemory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(StaticRAM,SRAM)、动态随机存取存储器(DynamicRAM,DRAM)、同步动态随机存取存储器(SynchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(DoubleDataRateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(SynchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambusRAM,DRRAM)。本文描述的存储器402旨在包括但不限于这些和任意其它适合类型的存储器。
在一些实施方式中,存储器402存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统4021和应用程序4022。
其中,操作系统4021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序4022,包含各种应用程序,例如媒体播放器(MediaPlayer)、浏览器(Browser)等,用于实现各种应用业务。实现本发明实施例方法的程序可以包含在应用程序4022中。
在本发明实施例中,通过调用存储器402存储的程序或指令,具体的,可以是应用程序4022中存储的程序或指令,处理器401用于执行各方法实施例所提供的方法步骤,例如包括:
当接收到访问请求时,确定接收所述访问请求的端口;判断所述端口是否为动态链接库SO文件更新端口;若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,所述程序代码采用预设的方式设置于所述应用程序中。
可选地,以注释的方式在所述GO语言服务器中的应用程序引入程序代码。
可选地,从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中;将库函数指针指向的地址设置为所述缓存地址;向用户返回动态链接库SO文件的更新结果。
可选地,对所述库函数指针加锁;在所述库函数指针加锁的过程中,将库函数指针指向的地址设置为所述缓存地址;在对所述库函数指针指向的地址进行修改后,对所述库函数指针解锁。
可选地,若接收所述访问请求的端口非动态链接库SO文件更新端口,则判断接收所述访问请求的端口是否为动态链接库SO文件调用端口;若接收所述访问请求的端口为动态链接库SO文件调用端口,则获取库函数指针;根据所述访问请求,确定库函数指针指向的地址;获取所述库函数指针指向的地址对应的库函数,并返回给用户。
可选地,对所述库函数指针加锁;在所述库函数指针加锁的过程中,获取所述库函数指针指向的地址对应的库函数,并返回给用户;在获取所述库函数指针指向的地址对应的库函数后,对所述库函数指针解锁。
可选地,按照预设的监测周期,监测动态链接库SO文件更新端口以及动态链接库SO文件调用端口是否接收到用户输入的访问请求;当接收到用户输入的访问请求时,确定接收所述访问请求的端口。
上述本发明实施例揭示的方法可以应用于处理器401中,或者由处理器401实现。处理器401可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器401中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器401可以是通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(FieldProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器402,处理器401读取存储器402中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecificIntegratedCircuits,ASIC)、数字信号处理器(DigitalSignalProcessing,DSP)、数字信号处理设备(DSPDevice,DSPD)、可编程逻辑设备(ProgrammableLogicDevice,PLD)、现场可编程门阵列(Field-ProgrammableGateArray,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本实施例提供的计算机设备可以是如图4中所示的计算机设备,可执行如图1-2中动态链接库SO文件的加载方法的所有步骤,进而实现图1-2所示动态链接库SO文件的加载方法的技术效果,具体请参照图1-2相关描述,为简洁描述,在此不作赘述。
本发明实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。
当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在动态链接库SO文件的加载设备侧执行的动态链接库SO文件的加载方法。
所述处理器用于执行存储器中存储的动态链接库SO文件的加载程序,以实现以下在动态链接库SO文件的加载设备侧执行的动态链接库SO文件的加载方法的步骤:
当接收到访问请求时,确定接收所述访问请求的端口;判断所述端口是否为动态链接库SO文件更新端口;若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,所述程序代码采用预设的方式设置于所述应用程序中。
可选地,以注释的方式在所述GO语言服务器中的应用程序引入程序代码。
可选地,从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中;将库函数指针指向的地址设置为所述缓存地址;向用户返回动态链接库SO文件的更新结果。
可选地,对所述库函数指针加锁;在所述库函数指针加锁的过程中,将库函数指针指向的地址设置为所述缓存地址;在对所述库函数指针指向的地址进行修改后,对所述库函数指针解锁。
可选地,若接收所述访问请求的端口非动态链接库SO文件更新端口,则判断接收所述访问请求的端口是否为动态链接库SO文件调用端口;若接收所述访问请求的端口为动态链接库SO文件调用端口,则获取库函数指针;根据所述访问请求,确定库函数指针指向的地址;获取所述库函数指针指向的地址对应的库函数,并返回给用户。
可选地,对所述库函数指针加锁;在所述库函数指针加锁的过程中,获取所述库函数指针指向的地址对应的库函数,并返回给用户;在获取所述库函数指针指向的地址对应的库函数后,对所述库函数指针解锁。
可选地,按照预设的监测周期,监测动态链接库SO文件更新端口以及动态链接库SO文件调用端口是否接收到用户输入的访问请求;当接收到用户输入的访问请求时,确定接收所述访问请求的端口。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种动态链接库SO文件的加载方法,其特征在于,包括:
当接收到访问请求时,确定接收所述访问请求的端口;
判断所述端口是否为动态链接库SO文件更新端口;
若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,以注释的方式在GO语言服务器中的应用程序引入所述程序代码;
从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中;
将库函数指针指向的地址设置为所述缓存地址;
向用户返回动态链接库SO文件的更新结果。
2.根据权利要求1所述的方法,其特征在于,所述将库函数指针指向的地址设置为所述缓存地址,包括:
对所述库函数指针加锁;
在所述库函数指针加锁的过程中,将库函数指针指向的地址设置为所述缓存地址;
在对所述库函数指针指向的地址进行修改后,对所述库函数指针解锁。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若接收所述访问请求的端口非动态链接库SO文件更新端口,则判断接收所述访问请求的端口是否为动态链接库SO文件调用端口;
若接收所述访问请求的端口为动态链接库SO文件调用端口,则获取库函数指针;
根据所述访问请求,确定库函数指针指向的地址;
获取所述库函数指针指向的地址对应的库函数,并返回给用户。
4.根据权利要求3所述的方法,其特征在于,所述获取所述库函数指针指向的地址对应的库函数,并返回给用户,包括:
对所述库函数指针加锁;
在所述库函数指针加锁的过程中,获取所述库函数指针指向的地址对应的库函数,并返回给用户;
在获取所述库函数指针指向的地址对应的库函数后,对所述库函数指针解锁。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述当接收到用户输入的访问请求时,确定接收所述访问请求的端口,包括:
按照预设的监测周期,监测动态链接库SO文件更新端口以及动态链接库SO文件调用端口是否接收到用户输入的访问请求;
当接收到用户输入的访问请求时,确定接收所述访问请求的端口。
6.一种动态链接库SO文件的加载装置,其特征在于,所述装置包括:
端口确定模块,用于当接收到访问请求时,确定接收所述访问请求的端口;
判断模块,用于判断所述端口是否为动态链接库SO文件更新端口;
文件加载模块,用于若所述端口为动态链接库SO文件更新端口,调用本地预先配置的程序代码,加载目标动态链接库SO文件;
其中,以注释的方式在GO语言服务器中的应用程序引入所述程序代码;
所述装置还具体用于:
从所述目标动态链接库SO文件中读取目标库函数,并将所述目标库函数缓存至内存对应的缓存地址中;
将库函数指针指向的地址设置为所述缓存地址;
向用户返回动态链接库SO文件的更新结果。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至5任一项所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910557353.4A CN110471690B (zh) | 2019-06-25 | 2019-06-25 | 动态链接库so文件的加载方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910557353.4A CN110471690B (zh) | 2019-06-25 | 2019-06-25 | 动态链接库so文件的加载方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110471690A CN110471690A (zh) | 2019-11-19 |
CN110471690B true CN110471690B (zh) | 2021-09-14 |
Family
ID=68506956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910557353.4A Active CN110471690B (zh) | 2019-06-25 | 2019-06-25 | 动态链接库so文件的加载方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110471690B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416383A (zh) * | 2020-01-21 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | golang程序热更新方法、装置以及计算机设备 |
CN114489827B (zh) * | 2020-11-13 | 2023-11-03 | 上海华为技术有限公司 | 动态库加载方法、核部署的调整方法及相关装置 |
CN112817657B (zh) * | 2021-01-29 | 2023-07-18 | 北京奇艺世纪科技有限公司 | 一种应用程序启动项加载方法、装置、系统及存储介质 |
CN115640037B (zh) * | 2022-09-09 | 2023-08-11 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
CN115904548A (zh) * | 2023-01-09 | 2023-04-04 | 北京六方云信息技术有限公司 | 应用识别算法模型动态加载方法、装置及系统 |
CN116400945B (zh) * | 2023-06-08 | 2023-10-27 | 中航信移动科技有限公司 | 一种动态链接库升级方法、电子设备及存储介质 |
CN117762430A (zh) * | 2024-02-22 | 2024-03-26 | 腾讯科技(深圳)有限公司 | 基于应用程序的处理方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987774A (zh) * | 2006-11-29 | 2007-06-27 | 南京联创科技股份有限公司 | 大规模并发联机交易中基于版本的c/c++组件热插拔方法 |
CN101330399A (zh) * | 2007-06-19 | 2008-12-24 | 上海风格信息技术有限公司 | 嵌入式设备的升级方法 |
CN102073520A (zh) * | 2010-12-30 | 2011-05-25 | 中国民航信息网络股份有限公司 | 一种c++应用程序版本动态管理系统和方法 |
CN102331931A (zh) * | 2011-07-25 | 2012-01-25 | 深圳市万兴软件有限公司 | 动态库管理方法和装置 |
CN109842610A (zh) * | 2018-12-13 | 2019-06-04 | 平安科技(深圳)有限公司 | 接口请求处理方法、装置、计算机设备及存储介质 |
-
2019
- 2019-06-25 CN CN201910557353.4A patent/CN110471690B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1987774A (zh) * | 2006-11-29 | 2007-06-27 | 南京联创科技股份有限公司 | 大规模并发联机交易中基于版本的c/c++组件热插拔方法 |
CN101330399A (zh) * | 2007-06-19 | 2008-12-24 | 上海风格信息技术有限公司 | 嵌入式设备的升级方法 |
CN102073520A (zh) * | 2010-12-30 | 2011-05-25 | 中国民航信息网络股份有限公司 | 一种c++应用程序版本动态管理系统和方法 |
CN102331931A (zh) * | 2011-07-25 | 2012-01-25 | 深圳市万兴软件有限公司 | 动态库管理方法和装置 |
CN109842610A (zh) * | 2018-12-13 | 2019-06-04 | 平安科技(深圳)有限公司 | 接口请求处理方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
go语言与c语言的相互调用;QFdongdong;《https://www.jianshu.com/p/14e387d709d2》;20190409;1-5 * |
Also Published As
Publication number | Publication date |
---|---|
CN110471690A (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110471690B (zh) | 动态链接库so文件的加载方法、装置及存储介质 | |
US10019256B2 (en) | Systems and methods for incremental software development | |
KR100675518B1 (ko) | 모듈식 바이오스 업데이트 메커니즘 | |
US6754828B1 (en) | Algorithm for non-volatile memory updates | |
US8539213B2 (en) | Manageability extension mechanism for system firmware | |
US10437580B2 (en) | Software updating methods and systems | |
US10019598B2 (en) | Dynamic service discovery | |
US8997047B2 (en) | Dynamically updating code without requiring processes to restart | |
CN107220074B (zh) | 对支撑层软件功能的访问、升级方法及装置 | |
CN111427596B (zh) | 一种软件升级的方法、装置及终端设备 | |
US10726133B1 (en) | Securely loading UEFI images at runtime | |
US20060059327A1 (en) | Method to reset an image to a known state | |
CN111930429A (zh) | 一种Android操作系统快速启动的方法及电子设备 | |
CN106293790B (zh) | 基于Firefox操作系统的应用程序升级方法和装置 | |
CN112199109B (zh) | 一种固件升级方法、装置、设备及介质 | |
CN112579138A (zh) | 页面展示方法、装置、电子设备及存储介质 | |
CN106775608B (zh) | 独立系统进程的实现方法和装置 | |
CN109766084B (zh) | 支付应用的定制开发方法、装置、计算机设备和存储介质 | |
CN114780173B (zh) | 一种在应用中加载插件的方法、计算设备及存储介质 | |
CN109933355B (zh) | 应用程序升级方法及装置 | |
CN111338708A (zh) | 基于安卓插件的应用程序处理方法、客户端及系统 | |
US20150212866A1 (en) | Management system for service of multiple operating environments, and methods thereof | |
US11922158B2 (en) | Unified local patch repository | |
CN111949301B (zh) | 应用程序热更新方法、装置和计算机可读存储介质 | |
CN114969720A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |