CN111580798B - 一种动态链接库实现方法、系统、计算机设备及存储介质 - Google Patents

一种动态链接库实现方法、系统、计算机设备及存储介质 Download PDF

Info

Publication number
CN111580798B
CN111580798B CN202010234411.2A CN202010234411A CN111580798B CN 111580798 B CN111580798 B CN 111580798B CN 202010234411 A CN202010234411 A CN 202010234411A CN 111580798 B CN111580798 B CN 111580798B
Authority
CN
China
Prior art keywords
library
pointer
library file
macro
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.)
Active
Application number
CN202010234411.2A
Other languages
English (en)
Other versions
CN111580798A (zh
Inventor
肖志良
曾绍稳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Foshan Polytechnic
Original Assignee
Foshan Polytechnic
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Foshan Polytechnic filed Critical Foshan Polytechnic
Priority to CN202010234411.2A priority Critical patent/CN111580798B/zh
Publication of CN111580798A publication Critical patent/CN111580798A/zh
Application granted granted Critical
Publication of CN111580798B publication Critical patent/CN111580798B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种动态链接库实现方法,包括:扫描库文件的源代码中的全局变量并用宏定义所述全局变量,在所述库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义代表的结构体指针参数,创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的库文件;检测库文件的链接方式并根据链接方式对库文件进行相应的配置。采用本发明,可以极大程度地增加微控制器环境下动态链接库的跨工具链可用性,并提高库在静态链接状况下的性能。

Description

一种动态链接库实现方法、系统、计算机设备及存储介质
技术领域
本发明涉及嵌入式系统领域,尤其涉及一种动态链接库实现方法、系统、计算机设备及存储介质。
背景技术
随着工业4.0和物联网的兴起,嵌入式设备日益复杂,因此出现了多分区、运行进程模型的单片机。然而,在多个进程之间,往往有动态共享的代码段部分,这些部分对于每一个进程都是共同的,然而数据段则对各个进程是不同的。在带有MMU的处理器上,我们通常使用页表映射各个进程的放置在不同物理内存地址的数据段到不同进程中的同一个虚拟地址,这样即便数据段的虚拟地址不同,也可以不使用编译器的(PIC)。但是在微控制器上情况却不相同:要使用任何的动态链接库,现有技术都要求必须使用位置无关代码,因为微控制器不具备虚拟存储器功能。
现有的嵌入式设备的动态链接库的制作方法大概有如下几种:
将同一个库的代码段和数据段复制两份,放置在不同的进程中。这种做法完全不要求工具链有产生PIC的功能,但是对代码段的无端复制是非常浪费微控制器仅有的Flash的。如果碰巧代码段的体积比较大(比如某些DSP函数内部的表或者一整个js语言运行时),可能导致微控制器的代码段体积完全失控。
使用位置无关代码。这种方法使用编译器的特殊命令行参数(如gcc的-fPIC生成位置无关代码)。然后在每个进程启动之时使用特殊的一小段代码修正该动态链接库的数据链接到不同的进程中的数据段。此种做法仅仅保留了一份代码段,在性能上也没有任何损失,但在各个编译器之间是不兼容的。修正动态链接库的一小段代码在不同的架构和编译器上往往大相径庭,因为不同编译器生成的位置无关代码的具体细节往往有偏差。使用该种方法,对于架构和编译器的适配工作量极大,也即该方法不是编译器(工具链)中立的,无法使用一套代码应付多个场合。
在编写库的时候,就库中添加一个放置有所有的全局变量的结构体对象,然后在每次调用该库时都往代码段传入该结构体对象的指针(类似C库中的FILE*)。此种做法固然不需要编译器支持PIC,也可以只保留一份代码段,但是当该库只有一个进程引用时,我们仍然需要提供该库的结构体对象指针,在访问全局变量时也总是会从这个指针开始,这造成了不必要的性能开销,也造成了代码段的膨胀。也即,如果自始至终只有一个进程引用该库,那么从一开始就完全没有必要使用该结构体对象。
发明内容
本发明所要解决的技术问题在于,提供一种动态链接库实现方法、系统、计算机设备及存储介质,能够解决现有的技术问题。
为了解决上述技术问题,本发明提供了一种动态链接库实现方法,包括:扫描原始库文件的源代码中的全局变量并用宏定义所述全局变量,在所述原始库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义的结构体指针参数;创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的目标库文件;检测所述目标库文件的链接方式并根据链接方式对目标库文件进行相应的配置,其中,如果检测到目标库文件以静态链接方式被编译链接,则代表全局变量的宏会被定义为全局变量本身,并将代表结构体指针的宏定义为空,如果检测到目标库文件以动态链接方式被编译链接,则代表全局变量的宏会被定义为通过结构体存取的全局变量,并将代表结构体指针的宏定义为结构体指针的声明。
优选地,所述动态链接库实现方法还包括:对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置。
优选地,所述对每一个进程生成额外的代码包裹库的外部接口的方法为:如果生成的接口比原来的接口少了结构体指针,则库的外部接口必须要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
优选地,不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
本发明还提供了一种动态链接库实现系统,包括:预处理模块,用于对库文件进行预处理,其中,预处理模块包括扫描单元、宏定义单元以及创建单元,所述扫描单元用于扫描所述库文件的源代码中的全局变量;所述宏定义单元用于并用宏替换所述全局变量,用于在所述库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义代表的结构体指针参数,所述创建单元用于创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的库文件;检测配置模块,用于检测库文件的链接方式并根据链接方式对库文件进行相应的配置,其中,如果检测到库文件以静态链接方式被编译链接,则代表全局变量的宏会被定义为全局变量本身,并将代表结构体指针的宏定义为空,如果检测到库文件以动态链接方式被编译链接,则代表全局变量的宏会被定义为通过结构体存取得全局变量,并将代表结构体指针的宏定义为结构体指针的声明。
优选地,所述检测配置模块还对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置。
优选地,所述检测配置模块用于当生成的外部接口比原来的接口少了结构体指针时,给包裹库的外部接口必须要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
优选地,预处理模块不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现任意一项所述方法的步骤。
本发明还提供了一种存储介质,其存储有计算机指令,该程序被处理器执行时实现任意一项所述方法的步骤。
实施本发明的有益效果在于:
本发明提供一种动态链接库实现方法、系统计算机设备及存储介质,可以极大程度地增加微控制器环境下动态链接库的跨工具链可用性,并提高库在静态链接状况下的性能。首先,本发明在进行动态链接时不限于某种工具链本身,没有对工具链的依赖,用户可以自行切换工具链。第二,本发明在使用动态链接和静态链接时对外提供的接口是相同的,底层数据的访问被隐藏,不需要用户显式地传入指向全局数据段的指针。第三,本发明在静态链接下由于不存在结构体指针,因此可以完全消除由此指针造成的代码膨胀和性能损失,达到了整个系统性能的最大化。第四,如果使用的库文件本身(比如其他开源库)不直接满足库配置模块的格式要求,那么可以通过库文件预处理模块将库文件变为符合要求的格式,大大增加了本发明能使用的库的范围。
附图说明
图1是本发明提供的动态链接库实现方法流程图;
图2是本发明提供的动态链接库实现系统示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。仅此声明,本发明在文中出现或即将出现的上、下、左、右、前、后、内、外等方位用词,仅以本发明的附图为基准,其并不是对本发明的具体限定。
如图1所示,本发明提供了一种动态链接库实现方法,包括:
S101,扫描库文件的源代码中的全局变量并用宏定义所述全局变量,
S102,在所述库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义代表的结构体指针参数;
S103,创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的库文件;
S104,检测库文件的链接方式并根据链接方式对库文件进行相应的配置,其中,如果检测到库文件以静态链接方式被编译链接,则代表全局变量的宏会被定义为全局变量本身,并将代表结构体指针的宏定义为空,如果检测到库文件以动态链接方式被编译链接,则代表全局变量的宏会被定义为通过结构体存取的全局变量,并将代表结构体指针的宏定义为结构体指针的声明。
优选地,所述动态链接库实现方法还包括:对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置。这样,用户就完全注意不到结构体指针本身,使用动态和静态链接的外部接口本身并无任何区别。
进一步地,所述对每一个进程生成额外的代码包裹库的外部接口的方法为:如果生成的接口比原来的接口少了结构体指针,则库的外部接口必须要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
以C类语言表示的源码举例,例如:
库的接口为func(ptr,param1,param2)
在进程1中包裹为:
proc1_func(param1,param2)//包裹库外部接口进程
{
func(proc1_data,param1,param2)//库的外部接口
}
在进程2中包裹为:
proc2_func(param1,param2)//包裹库外部接口进程
{
func(proc2_data,param1,param2)//库的外部接口
}
更佳地,不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
如图2所示,本发明还提供了一种动态链接库实现系统,包括:预处理模块1,用于对库文件进行预处理,其中,预处理模块1包括扫描单元101、宏定义单元102以及创建单元103,所述扫描单元101用于扫描所述库文件的源代码中的全局变量并用宏替换所述全局变量,所述宏定义单元102用于在所述库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义代表的结构体指针参数,所述创建单元103用于创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的库文件;检测配置模块2,用于检测库文件的链接方式并根据链接方式对库文件进行相应的配置,其中,如果检测到库文件以静态链接方式被编译链接,则代表全局变量的宏会被定义为全局变量本身,并将代表结构体指针的宏定义为空,如果检测到库文件以动态链接方式被编译链接,则代表全局变量的宏会被定义为通过结构体存取得全局变量,并将代表结构体指针的宏定义为结构体指针的声明。
优选地,所述检测配置模块2还对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置。
更佳地,所述检测配置模块用于当生成的外部接口比原来的接口少了结构体指针时,给包裹库的外部接口必须要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
进一步地,预处理模块不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
由于本发明采取结构体指针访问全局变量,因此是工具链中立的,不依赖工具链本身的功能。本发明在动态链接的场合下生成的接口无结构体指针,因此用户也免去了在动态和静态使用的场合下适配不同接口的麻烦,同一份库代码在静态和动态链接下切换完全不需要修改代码。
本实施给出一个非常简要的具体实施例,阐述该方法如何生成一个具体的动态链接库。具体如下:
某公司研发某基于Javascript编程的智能硬件产品。该产品有两条产品线,其中一条产品线只允许用户运行一个Javascript脚本,另一条产品线则允许用户并行运行多个Javascript脚本。由于Javascript运行时环境可能会崩溃,因此我们不希望将多个Javascript脚本放置在一个进程内部,必须要使用多个进程,每个运行一个Javascript脚本。由于Javascript运行时是一个库,因此我们不希望系统中出现多份代码段副本。首先,由于Javascript运行时是开源软件,因此需要运行库文件预处理模块生成其可被库配置器模块配置的Javascript运行时库文件本身。然后,在单一Javascript脚本的产品线上使用静态链接,此时配置器将结构体指针宏消去,并且将直接生成静态链接的、无性能损失的代码。在多Javascript脚本的产品线上使用动态链接,此时由配置器在胶水代码中生成包裹接口并且在包裹接口内部传入指向静态定义结构体的指针给库,对外仍然表现为与静态配置一样的接口,使得该公司既可以使用同一份代码段不需要显式地更改代码以传入结构体指针。实现方便的动态链接。在该实施例中,该公司自始至终无须进行涉及到编译器和工具链本身的任何特点,因为本发明是与工具链无关的,也不依赖于工具链生成位置无关代码。
本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现上述方法的步骤。
本发明还提供了一种存储介质,其存储有计算机指令,该程序被处理器执行时实现上述方法的步骤。以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
所述动态链接库实现系统可以运行于桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备中。本领域技术人员可以理解,所述例子仅仅是动态链接库实现系统的示例,并不构成对动态链接库实现系统的限定,可以包括比例子更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述动态链接库实现系统还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述动态链接库实现系统运行系统的控制中心,利用各种接口和线路连接整个动态链接库实现系统可运行系统的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述动态链接库实现系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
尽管本公开的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本公开的预定范围。此外,上文以发明人可预见的实施例对本公开进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本公开的非实质性改动仍可代表本公开的等效改动。

Claims (6)

1.一种动态链接库实现方法,其特征在于,包括:
扫描原始库文件的源代码中的全局变量并用宏定义所述全局变量,
在所述原始库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义的结构体指针参数;
创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的目标库文件;
检测所述目标库文件的链接方式并根据链接方式对目标库文件进行相应的配置,其中,
如果检测到目标库文件以静态链接方式被编译链接,则将代表全局变量的宏定义为全局变量本身,并将代表结构体指针的宏定义为空,
如果检测到目标库文件以动态链接方式被编译链接,则将代表全局变量的宏定义为通过结构体存取的全局变量,并将代表结构体指针的宏定义为结构体指针的声明;
所述动态链接库实现方法还包括:对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置;其中,所述对每一个进程生成额外的代码包裹库的外部接口的方法为:如果生成的接口比原来的接口少了结构体指针,则库的外部接口要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
2.如权利要求1所述的动态链接库实现方法,其特征在于,不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
3.一种动态链接库实现系统,其特征在于,包括:
预处理模块,用于对库文件进行预处理,其中,预处理模块包括扫描单元、宏定义单元以及创建单元,
所述扫描单元用于扫描所述库文件的源代码中的全局变量;
所述宏定义单元用于并用宏替换所述全局变量,
用于在所述库文件的源代码中的每个非C运行时库的函数上都加上一个用宏定义代表的结构体指针参数,
所述创建单元用于创建一个头文件并声明一个包括所有全局变量的结构体指针,进而得到满足格式要求的库文件;
检测配置模块,用于检测库文件的链接方式并根据链接方式对库文件进行相应的配置,其中,
如果检测到库文件以静态链接方式被编译链接,则代表全局变量的宏会被定义为全局变量本身,并将代表结构体指针的宏定义为空,
如果检测到库文件以动态链接方式被编译链接,则代表全局变量的宏会被定义为通过结构体存取得全局变量,并将代表结构体指针的宏定义为结构体指针的声明;
所述检测配置模块还对每一个进程生成额外的代码包裹库的外部接口,隐藏其数据段结构体指针,并且在调用时将数据段结构体指针指向分区的全局变量结构体的位置;所述检测配置模块用于当生成的外部接口比原来的接口少了结构体指针时,给包裹库的外部接口必须要设置结构体指针供每一个进程传入其私有数据区域的位置,对于每个进程的数据区域的位置,传递一个固定的指针的值到进程中。
4.如权利要求3所述的动态链接库实现系统,其特征在于,预处理模块不经过宏在源代码中做替换而直接预处理源代码为最终配置形式,即在动态配置下直接替换全局变量为通过结构体指针访问的全局变量和在每个非C运行时库函数的参数列表中都加上结构体指针。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现权利要求1-2任意一项所述方法的步骤。
6.一种存储介质,其存储有计算机指令,其特征在于,所述指令被处理器执行时实现权利要求1-2任意一项所述方法的步骤。
CN202010234411.2A 2020-03-30 2020-03-30 一种动态链接库实现方法、系统、计算机设备及存储介质 Active CN111580798B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010234411.2A CN111580798B (zh) 2020-03-30 2020-03-30 一种动态链接库实现方法、系统、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010234411.2A CN111580798B (zh) 2020-03-30 2020-03-30 一种动态链接库实现方法、系统、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN111580798A CN111580798A (zh) 2020-08-25
CN111580798B true CN111580798B (zh) 2023-06-06

Family

ID=72113419

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010234411.2A Active CN111580798B (zh) 2020-03-30 2020-03-30 一种动态链接库实现方法、系统、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN111580798B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113741411B (zh) * 2021-11-08 2022-02-01 西安热工研究院有限公司 一种分散控制系统全局变量点产物文件生成方法和系统
CN115794260B (zh) * 2023-02-06 2023-05-05 湖南高至科技有限公司 一种简单的dsp软件库动态加载方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101826014A (zh) * 2010-04-20 2010-09-08 北京邮电大学 一种软件工程源代码的分割方法
CN107992723A (zh) * 2017-11-29 2018-05-04 南京莱斯信息技术股份有限公司 一种基于动态链接库的Java源码保护方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9213531B2 (en) * 2014-05-01 2015-12-15 Google Inc. Methods to eliminate extra memory loads while accessing global variables in position independent code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101826014A (zh) * 2010-04-20 2010-09-08 北京邮电大学 一种软件工程源代码的分割方法
CN107992723A (zh) * 2017-11-29 2018-05-04 南京莱斯信息技术股份有限公司 一种基于动态链接库的Java源码保护方法

Also Published As

Publication number Publication date
CN111580798A (zh) 2020-08-25

Similar Documents

Publication Publication Date Title
US10776087B2 (en) Sequence optimizations in a high-performance computing environment
US6876996B2 (en) Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
US8756590B2 (en) Binding data parallel device source code
US7243333B2 (en) Method and apparatus for creating and executing integrated executables in a heterogeneous architecture
JP4662657B2 (ja) 統一データ型システムおよび方法
US10635420B2 (en) Overriding a migrated method in an updated type
US7200840B2 (en) Method and apparatus for enabling access to global data by a plurality of codes in an integrated executable for a heterogeneous architecture
US8578357B2 (en) Endian conversion tool
CN111580798B (zh) 一种动态链接库实现方法、系统、计算机设备及存储介质
CN103858099A (zh) 用于在异构计算机上编译和运行高级程序的技术
JP2006092544A (ja) プリオペレーティングシステム環境におけるモジュールの動的リンク
KR20130040264A (ko) 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
WO2012088508A2 (en) Extensible data parallel semantics
US8341613B2 (en) Reducing stack space consumption via head-call optimization
US9465594B2 (en) Distributed implementation of sequential code that includes a future
US20130086566A1 (en) Vector width-aware synchronization-elision for vector processors
Hill et al. Tempest: A substrate for portable parallel programs
US20130086565A1 (en) Low-level function selection using vector-width
WO2010027665A2 (en) Type descriptor management for frozen objects
US10496433B2 (en) Modification of context saving functions
US7707565B2 (en) Method for consistent and efficient management of program configuration and customizing data
US8250589B2 (en) Method for simplifying interfaces having dynamic libraries
CA2081913C (en) Method and apparatus for managing page zero memory accesses in a multi-processor system
CN115639984A (zh) 一种前端线上编译引擎的实现方法及系统
US20220261238A1 (en) Method and system for deploying third-party application to microcontroller by means of edge assistance

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