CN117289913A - 编译器源文件处理方法、电子设备和介质 - Google Patents
编译器源文件处理方法、电子设备和介质 Download PDFInfo
- Publication number
- CN117289913A CN117289913A CN202311361993.0A CN202311361993A CN117289913A CN 117289913 A CN117289913 A CN 117289913A CN 202311361993 A CN202311361993 A CN 202311361993A CN 117289913 A CN117289913 A CN 117289913A
- Authority
- CN
- China
- Prior art keywords
- command line
- compiler
- target
- source file
- character string
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 9
- 238000012545 processing Methods 0.000 claims abstract description 56
- 238000000034 method Methods 0.000 claims abstract description 30
- 230000005540 biological transmission Effects 0.000 claims description 20
- 238000006467 substitution reaction Methods 0.000 claims description 3
- 239000000758 substrate Substances 0.000 claims 4
- 239000000523 sample Substances 0.000 claims 2
- 238000007781 pre-processing Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及计算机技术领域,尤其涉及一种编译器源文件处理方法、电子设备和介质,方法包括步骤S1、在编译器中添加自定义命令行参数;步骤S2、所述编译器获取源文件,并在命令行中指定自定义命令行参数;步骤S3、解析命令行中指定的自定义命令行参数,根据指定的自定义命令行参数创建文件处理对象;步骤S4、根据创建的文件处理对象读取源文件内容进行处理,并将处理结果存储在编译器的缓冲区中;步骤S5、基于所述编译器的缓冲区中的处理结果进行编译,生成可执行文件。本发明提高了编译器源文件的处理效率,降低了编译器源文件的处理成本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种编译器源文件处理方法、电子设备和介质。
背景技术
随着计算机的不断发展和应用,计算机的项目工程的规模越来越庞大,项目工程中依赖的第三方库越来越多,且迭代频繁,使得代码编译的场景日益复杂,出现了诸如分布式编译、第三方库版本变更升级、源代码序列化/反序列化的工具或技术。这些工具和技术在编译前对源代码文件进行匹配替换、序列化或者网络传输等操作。这些编译前对源代码的处理均是为编译服务的,但是现有的编译器从设计到实现均没有考虑这些场景,无法直接支持现代编译中的复杂场景和需求,还需要额外设置处理流程,通过文件输入/输出(IO)操作从磁盘读取源文件进行处理,效率低,成本高。
发明内容
本发明目的在于,提供一种编译器源文件处理方法、电子设备和介质,提高了编译器源文件的处理效率,降低了编译器源文件的处理成本。
根据本发明第一方面,提供了一种编译器源文件处理方法,包括:
步骤S1、在编译器中添加自定义命令行参数;
步骤S2、所述编译器获取源文件,并在命令行中指定自定义命令行参数;
步骤S3、解析命令行中指定的自定义命令行参数,根据指定的自定义命令行参数创建文件处理对象;
步骤S4、根据创建的文件处理对象读取源文件内容进行处理,并将处理结果存储在编译器的缓冲区中;
步骤S5、基于所述编译器的缓冲区中的处理结果进行编译,生成可执行文件。
根据本发明第二方面,提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本发明第一方面所述的方法。
根据本发明第三方面,提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机指令用于执行本发明第一方面所述的方法。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提供的一种编译器源文件处理方法、电子设备和介质可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有以下有益效果:
本发明拓展了现有编译器的功能,将对编译器源文件的前处理全部放在编译器中进行,且将处理结果存储在编译器的缓冲区中,减少文件IO,只需在编译时进行文本替换,无需更改源码,使得编译器可以支持现代编译中的复杂场景和需求,提高了编译器源文件的处理效率,降低了编译器源文件的处理成本。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的编译器源文件处理方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种编译器源文件处理方法,包括:
步骤S1、在编译器中添加自定义命令行参数。
作为示例,所述编译器具体可以为gdc编译器、clang编译器、gcc编译器等,优选的,所述编译器为clang编译器。gdc编译器、clang编译器、gcc编译器均为现有的编译器,在此不再展开描述。需要说明的是,编译器中本身设置有命令行参数,例如gdc编译器中的“gcc -E source_file.c”,-E表示只执行到预编译。直接输出预编译结果。 再如gdc编译器中的gcc -S source_file.c,-S表示只执行到源代码到汇编代码的转换,输出汇编代码等等。但是编译器中原本设置的命令行参数并不能直接实现对源文件的前处理,因为,本发明通过步骤S2对编译器的命令行参数进行了拓展。
步骤S2、所述编译器获取源文件,并在命令行中指定自定义命令行参数。
需要说明的是,本发明只需获取一次源文件,后续基于自定义的命令行参数在编译器中直接对源文件进行前处理,无需多次通过磁盘读取源文件,也无需更改磁盘中的源文件,减少文件IO。
步骤S3、解析命令行中指定的自定义命令行参数,根据指定的自定义命令行参数创建文件处理对象。
其中,步骤S3在实现过程中,若遇到错误,则立即报告错误信息并终止编译,避免后续进行无用计算。
步骤S4、根据创建的文件处理对象读取源文件内容进行处理,并将处理结果存储在编译器的缓冲区中。
需要说明的是,创建文件处理对象、以及根据创建的文件处理对象读取源文件内容进行处理均是在编译器中实现,且处理结果也是直接存储在编译器的缓冲区中,可以统一的接口方式,上层应用可以直接拓展更多的个性化场景,在编译器中直接实现源文件的前处理。
步骤S5、基于所述编译器的缓冲区中的处理结果进行编译,生成可执行文件。
在编译器中,根据具体应用场景对源文件进行前处理之后,直接在基于所述编译器的缓冲区中的处理结果进行编译即可生成对应的编译产物,即可执行文件。拓展了编译器的功能,使编译器可以支持编译中的复杂场景和需求。
作为一种实施例,所述自定义命令行参数包括字符串匹配替换命令行参数、网络传输命令行参数和动态加载命令行参数。
作为一种实施例,字符串匹配替换命令行参数具体可用于第三方版本库变更升级的场景,若指定的自定义命令行参数为字符串匹配替换命令行参数,所述步骤S3包括:
步骤S31、解析字符串匹配替换命令行参数,获取字符串匹配替换命令行参数对应的原始字符串和目标字符串。
步骤S32、根据所述原始字符串和目标字符串创建字符串匹配替换对象。
若指定的自定义命令行参数为字符串匹配替换命令行参数,所述步骤S4包括:
步骤S41、根据所创建字符串匹配替换对象,获取源文件中包含所述原始字符串的代码,并将所述原始字符串替换为目标字符串。
步骤S42、将替换目标字符换的源文件存储在编译器的缓冲区中。
通过步骤S31-步骤S32直接创建源文件对应的字符串匹配替换对象,通过步骤S41-步骤S42再基于所创建字符串匹配替换对象将源文件中述原始字符串替换为目标字符串,在第三方版本库变更升级的场景中,可以直接基于字符串匹配替换命令行参数实现第三方版本库变更升级,无需在编译器之外额外对源文件进行处理,提高了源文件的处理效率。
拓展网络传输命令行参数具体可用于分布式编译场景,分布式编译场景需要涉及网络传输操作,源文件通常比较大,现有技术中,分布是编译会设计网络传输,且直接通过网络传输的方式传输到磁盘上,效率低,成本高。作为一种实施例,若指定的自定义命令行参数为网络传输命令行参数,所述步骤S3包括:
步骤S311、解析网络传输命令行参数,获取机器地址和端口信息。
步骤S312、基于所述机器地址和端口信息创建网络传输对象。
若指定的自定义命令行参数为网络传输命令行参数,所述步骤S4包括:
步骤S411、根据所创建的网络传输对象连接到目标机器,从所述目标机器中获取目标数据。
步骤S412、将所获取的目标数据以及源文件存储在编译器的缓冲区中。
通过步骤S311-步骤S312,基于网络传输命令行参数创建网络传输对象,通过步骤S411-步骤S412再基于所创建的网络传输对象获取目标数据直接存储在编译器的缓冲区中,无需访问磁盘,降低了编译器源文件的处理成本,提高了编译器源文件的处理效率。
拓展动态加载命令行参数可以适用于源代码序列化/反序列化的等应用场景,作为一种实施例,若指定的自定义命令行参数为动态加载命令行参数,所述步骤S3包括:
步骤S321、解析动态加载命令行参数,获取目标位置、目标调用接口和目标动态库。
步骤S322、创建动态加载的源文件处理对象,从所述目标位置中加载所述目标动态库,获取目标调用接口,将目标动态库和目标调用接口绑定到所述动态加载的源文件处理对象中。
若指定的自定义命令行参数为动态加载命令行参数,所述步骤S4包括:
步骤S421、为所述源文件加载动态加载的源文件处理对象中目标动态库的符号,从所述目标动态库中获取目标调用接口对应的调用信息。
步骤S422、将加载目标动态库的符号和目标调用接口对应的调用信息后的源文件存储在编译器的缓冲区中。
通过步骤S321-步骤S322,创建动态加载的源文件处理对象,且动态加载的源文件处理对象中绑定了目标动态库和目标调用接口,步骤S421-步骤S422基于所创建动态的加载的源文件处理对象,即可实现动态库的加载,且将处理结果直接存储在编译器的缓冲区中,无需在编译器外设置额外的加载动态库的处理。
需要说明的是,通过步骤S1-步骤S4,在编译器中直接完成了编译器对应源文件的前处理,且能支持现代编译中的复杂场景和需求,完成前处理之后,即可在编译器中执行后续编译操作,所述步骤S5包括:
步骤S51、从所述编译器的缓冲区中获取处理结果依次进行编译预处理、编译、汇编、链接处理,生成可执行文件。
其中,直接从编译器的缓冲区中获取处理结果进行后续编译处理,无需再读取磁盘,提高了编译文件的处理效率。需要说明的是,编译预处理、编译、汇编、链接处理直接采用现有编译技术中对应的处理技术即可,在此不再一一赘述。
需要说明的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
本发明实施例还提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本发明实施例所述的方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机指令用于执行本发明实施例所述的方法。
本发明实施例拓展了现有编译器的功能,将对编译器源文件的前处理全部放在编译器中进行,且将处理结果存储在编译器的缓冲区中,减少文件IO,只需在编译时进行文本替换,无需更改源码,使得编译器可以支持现代编译中的复杂场景和需求,提高了编译器源文件的处理效率,降低了编译器源文件的处理成本。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种编译器源文件处理方法,其特征在于,包括:
步骤S1、在编译器中添加自定义命令行参数;
步骤S2、所述编译器获取源文件,并在命令行中指定自定义命令行参数;
步骤S3、解析命令行中指定的自定义命令行参数,根据指定的自定义命令行参数创建文件处理对象;
步骤S4、根据创建的文件处理对象读取源文件内容进行处理,并将处理结果存储在编译器的缓冲区中;
步骤S5、基于所述编译器的缓冲区中的处理结果进行编译,生成可执行文件。
2.根据权利要求1所述的方法,其特征在于,
所述自定义命令行参数包括字符串匹配替换命令行参数、网络传输命令行参数和动态加载命令行参数。
3.根据权利要求2所述的方法,其特征在于,
若指定的自定义命令行参数为字符串匹配替换命令行参数,所述步骤S3包括:
步骤S31、解析字符串匹配替换命令行参数,获取字符串匹配替换命令行参数对应的原始字符串和目标字符串;
步骤S32、根据所述原始字符串和目标字符串创建字符串匹配替换对象。
4.根据权利要求3所述的方法,其特征在于,
若指定的自定义命令行参数为字符串匹配替换命令行参数,所述步骤S4包括:
步骤S41、根据所创建字符串匹配替换对象,获取源文件中包含所述原始字符串的代码,并将所述原始字符串替换为目标字符串;
步骤S42、将替换目标字符换的源文件存储在编译器的缓冲区中。
5.根据权利要求2所述的方法,其特征在于,
若指定的自定义命令行参数为网络传输命令行参数,所述步骤S3包括:
步骤S311、解析网络传输命令行参数,获取机器地址和端口信息;
步骤S312、基于所述机器地址和端口信息创建网络传输对象。
6.根据权利要求5所述的方法,其特征在于,
若指定的自定义命令行参数为网络传输命令行参数,所述步骤S4包括:
步骤S411、根据所创建的网络传输对象连接到目标机器,从所述目标机器中获取目标数据;
步骤S412、将所获取的目标数据以及源文件存储在编译器的缓冲区中。
7.根据权利要求2所述的方法,其特征在于,
若指定的自定义命令行参数为动态加载命令行参数,所述步骤S3包括:
步骤S321、解析动态加载命令行参数,获取目标位置、目标调用接口和目标动态库;
步骤S322、创建动态加载的源文件处理对象,从所述目标位置中加载所述目标动态库,获取目标调用接口,将目标动态库和目标调用接口绑定到所述动态加载的源文件处理对象中。
8.根据权利要求7所述的方法,其特征在于,
若指定的自定义命令行参数为动态加载命令行参数,所述步骤S4包括:
步骤S421、为所述源文件加载动态加载的源文件处理对象中目标动态库的符号,从所述目标动态库中获取目标调用接口对应的调用信息;
步骤S422、将加载目标动态库的符号和目标调用接口对应的调用信息后的源文件存储在编译器的缓冲区中。
9.一种电子设备,其特征在于,包括:
至少一个处理器;
以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行前述权利要求1-8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行前述权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311361993.0A CN117289913A (zh) | 2023-10-20 | 2023-10-20 | 编译器源文件处理方法、电子设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311361993.0A CN117289913A (zh) | 2023-10-20 | 2023-10-20 | 编译器源文件处理方法、电子设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117289913A true CN117289913A (zh) | 2023-12-26 |
Family
ID=89238981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311361993.0A Pending CN117289913A (zh) | 2023-10-20 | 2023-10-20 | 编译器源文件处理方法、电子设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117289913A (zh) |
-
2023
- 2023-10-20 CN CN202311361993.0A patent/CN117289913A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102059705B1 (ko) | 적응식 이식가능 라이브러리 | |
CN107273176B (zh) | 一种适配硬件架构的编译方法及装置 | |
US9841953B2 (en) | Pluggable components for runtime-image generation | |
JP2012506094A (ja) | ランタイムにおいて生成したコードのキャッシュへの格納 | |
CN110673856B (zh) | 一种数据处理方法、装置及机器可读存储介质 | |
US20060248521A1 (en) | Application conversion of source data | |
CN106850650B (zh) | 用于游戏客户端访问数据的方法及客户端游戏系统 | |
JP2012529093A (ja) | スクリーンキャプチャに関する方法、システムおよびコンピュータ・プログラム | |
US20100095283A1 (en) | Migration Apparatus Which Convert Application Program of Mainframe System into Application Program of Open System and Method for Thereof | |
CN113986402A (zh) | 函数调用方法、装置、电子设备及存储介质 | |
US9639375B2 (en) | Generation of language bindings for libraries using data from compiler generated debug information | |
US7458071B2 (en) | Compilation method, compiler apparatus and compiler | |
US6901591B1 (en) | Frameworks for invoking methods in virtual machines | |
JP2009169864A (ja) | コンパイル方法およびコンパイルプログラム | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
CN117289913A (zh) | 编译器源文件处理方法、电子设备和介质 | |
CN116483481A (zh) | 一种固件库调用方法、装置、设备及存储介质 | |
CN110806891A (zh) | 嵌入式设备软件版本的生成方法及装置 | |
CN114840195A (zh) | 一种针对iOS SDK静态库的私有化方法 | |
CN111708519B (zh) | 一种业务组件的处理方法、装置、设备和存储介质 | |
US7774767B2 (en) | System and method for compiler interprocedural optimization having support for object files in libraries | |
CN111796867B (zh) | 着色器的转换方法、装置及电子设备 | |
KR100846203B1 (ko) | 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체 | |
CN114020278A (zh) | 数据处理方法、装置、设备及存储介质 | |
JP2006338190A (ja) | 実装コード開発システム、及び実装コード開発プログラム |
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 |