一种文件编译方法及装置与流程

文档序号:12664781阅读:174来源:国知局
一种文件编译方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种文件编译方法及装置。



背景技术:

为使代码编写简洁灵活、并有效地节省程序运行时所在系统的内存空间,编程人员会将一些常用的功能函数封装在对应功能模块下的共享库文件中、并在需要时直接调用。然而,这也使得系统文件之间产生了一定的依赖关系,这些依赖关系可以存在于可执行程序文件与共享库文件之间,也可以存在于两个或多个共享库文件之间。文件依靠文件间的依赖关系、与被依赖的文件相互作用、共同完成系统中的每一项任务。要使文件的依赖关系真实有效,一般需要在这些文件尚未编译之前,就采用动态链接的方式预先在这些文件所对应的源码文件间建立起相对静态的依赖关系。

现有技术中,编译器在对存有依赖关系的源码文件进行编译时,会遵循如下原则:先对所有共享库文件所对应的源码文件进行编译、生成共享库文件,再对可执行程序文件所对应的源码文件进行编译、生成可执行程序文件,其中,共享库文件和可执行程序文件统称为目标文件;并且,在对共享库文件所对应的源码文件进行编译时,会依照各源码文件间的依赖关系,先对被依赖的源码文件进行编译,再对其它源码文件进行编译。以上两点共同保证了:编译器在对每一源码文件进行编译时,该文件所依赖的源码文件已经经过了编译操作、生成了相应的目标文件,并由此实现每一工程目录下所有源码文件的正常编译。然而,当存在两个或多个共享库文件所对应的源码文件采用上述动态链接的方式循环依赖时,这些文件将通过文件间的依赖关系、形成一个封闭的依赖关系链,而由于该依赖关系链中的任一文件都将同时依赖其它文件、并为其它文件所依赖,故编译器无论从哪一文件开始编译,都将因为当前文件所依赖的文件尚未编译而报告当前文件编译失败,并由此导致涉及这些循环依赖源码文件的所有编译过程均无法正常执行。



技术实现要素:

有鉴于此,本申请提供一种文件编译方法及装置,以当存在两个或者多个共享库文件所对应的源码文件采用上述动态链接的方式循环依赖时,实现涉及这些循环依赖源码文件的所有编译过程正常执行。

根据本申请实施例的第一方面,提供一种文件编译的方法,所述方法包括:

接收编译指令,针对编译指令所提供的每一功能模块的路径,确定该路径下共享库文件所对应的编译配置文件,其中,功能模块为用以实现系统功能的预配置文件或文件集;

针对编译配置文件中记录的共享库文件名称,判断以该名称命名的文件是否存在,并在不存在的情况下,创建以该名称命名的软链接文件;该软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于系统中任一源码文件所对应的自然更新时刻;

针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻;如果是,则对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

根据本申请实施例的第二方面,提供一种文件编译的装置,所述装置包括:

接收单元,用于接收编译指令;

确定单元,用于针对编译指令所提供的每一功能模块的路径,确定该路径下共享库文件所对应的编译配置文件,其中,功能模块为用以实现系统功能的预配置文件或文件集;

第一判断单元,用于针对编译配置文件中记录的共享库文件名称,判断以该名称命名的文件是否存在;

第一创建单元,用于在以该名称命名的文件不存在的情况下,创建以该名称命名的软链接文件;该软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设时刻预设编译完成时刻,且该预设时刻预设编译完成时刻早于系统中任一源码文件所对应的自然更新时刻;

第二判断单元,用于针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的自然编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻;

第二创建单元,用于在第二判断单元的判断结果为是时,对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

本申请中,当接收到编译指令,并确定每一功能模块路径下尚未存在以编译配置文件中记录的共享库文件名称命名的文件时,编译器会创建一个以该名称命名的软链接文件,而由于软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于该共享库文件所对应源码文件的自然更新时刻,故会触发编译器对该共享库文件所对应源码文件的重新编译,在生成真正共享库文件的同时,覆盖掉与该真实共享库文件重名的软链接文件。则当系统中存在两个或多个共享库文件所对应的源码文件采用动态链接的方式循环依赖时,由于编译器在编译生成真正的共享库文件之前,已预先生成了与真正共享库文件同名的、且已编译完成的软链接文件,故会不引发因任一被依赖文件尚未编译而导致的编译失败,从而实现涉及这些循环依赖源码文件的所有编译过程正常执行。

附图说明

图1是本申请一种文件编译方法的流程图;

图2是本申请一种文件编译方法的一个实施例流程图;

图3是本申请一种文件编译装置的第一种结构图;

图4是本申请一种文件编译装置的第二种结构图;

图5是本申请一种文件编译装置的第三种结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

随着编程语言的日渐成熟和广泛应用,编程人员通常会将一些常用的功能函数封装在对应功能模块下的共享库文件中、并在需要时直接调用。这不仅会赋予代码编写工作更高的灵活度、而且可以有效地节省程序运行时所在系统的内存空间。比如,在一示例性实施例中,当系统需要同时执行多个可执行程序文件时,中央处理单元可能会同时运行多个进程,用以完成每一可执行程序文件所对应的任务。在这一过程中,这些同时运行的可执行程序文件可能都需要调用内存管理函数,用以进行内存管理,而此时如果在每一可执行程序文件所对应的源码文件中均写明该内存管理函数的函数实现,则由于系统在对可执行程序文件进行执行操作时,会将该文件的所有代码读取到系统内存中,故会导致系统内存中存有多份内容相同的函数实现,从而增加了系统内存的使用率。但是,如果将这一内存管理函数预先保存在共享库文件中、且仅在各文件中直接调用,则系统内存中将仅会存有一份该内存管理函数的函数实现,有效节省了系统内存的内存空间。其中,共享库文件的本质是封装有相近、或相关功能函数的函数库,用以为编程人员提供一些既有的、通用的函数实现;而上述系统,可以是操作系统、运行于操作系统中的应用程序、以及特定产品或软件的开发系统等。

然而,上述将常用的功能函数封装在对应功能模块下的共享库文件中、并在需要时直接调用的机制,也使得系统文件之间产生了一定的依赖关系,比如上述可执行程序文件对内存管理函数所在共享库文件的依赖。为此,要使上述文件间的依赖关系真实有效,一般需要在这些文件尚未编译之前,就采用动态链接的方式预先在这些文件所对应的源码文件间建立起相对静态的依赖关系。但在编译器目前固有的编译原则下,当存在两个或多个共享库文件所对应的源码文件采用上述动态链接的方式循环依赖时,这些循环依赖文件所对应的源码文件、以及涉及这些循环依赖源码文件的所有编译过程都将无法正常执行。这是因为这些文件会通过文件间的依赖关系、形成一个封闭的依赖关系链,而由于该依赖关系链中的任一文件都将同时依赖其它文件、并为其它文件所依赖,故编译器无论从哪一文件开始编译,都将因为当前文件所依赖的文件尚未编译而报告当前文件编译失败。其中,上述动态链接方式的特点在于:当一可执行程序文件所对应的进程启动时,进程会首先将该文件所依赖的共享库文件读取到内存中,以便后续使用。这种方式下,编译器可以检查出函数调用时所传形参和实参在类型、数量、顺序等方面的合法性,从而提高代码运行的可靠性。在Linux操作系统下,上述动态链接具体是指:在每一目标文件所对应的编译配置文件中指定该目标文件所依赖的共享库文件名称。

为解决上述问题,本领域技术人员已做过不同的尝试,但也同时引入了新的问题。比如:

在现有技术的一种实现方式中,当第一共享库文件与第二共享库文件需要互相调用对方的函数时,即上述第一共享库文件与第二共享库文件所对应的源码文件循环依赖时,编程人员可在第一共享库文件所对应的源码文件中使用动态加载的方式调用第二共享库文件中的函数,而在第二共享库文件所对应的源码文件中保留使用动态链接的方式调用第一共享库文件中的函数。其中,上述动态加载方式的特点在于:当一可执行程序文件所对应的进程启动时,进程仅会在代码运行到相应位置时才去读取该文件所依赖的共享库文件。

在这种情况下,如果第一共享库文件所对应的源码文件先于第二共享库文件所对应的源码文件进行编译,则由于第一共享库文件所对应的源码文件对第二共享库文件所对应的源码文件所使用的依赖方式为动态加载方式,所以依照编译器的固有编译原则,编译器不会将对第二共享库文件的编译完成作为对第一共享库文件所对应的源码文件开始编译的先决条件,而是直接对第一共享库文件所对应的源码文件进行编译;当第一共享库文件编译完成时,第二共享库文件所对应的源码文件便可以实现正常编译。但是在上述动态加载方式下,编译器将无法检查出函数调用时所传形参和实参在类型、数量、顺序等方面的合法性,故会导致代码运行时的可靠性降低,甚至为企业造成重大的损失。

在现有技术的第二中实现方式中,比如,在Linux系统下针对共享库文件循环调用问题的既有实现中,编程人员可在第一共享库文件和第二共享库文件所对应的源码文件中直接指定所调用的对方库文件中的函数名称;并保证至少不在其中一个共享库文件所对应的编译配置文件中指定另一共享库文件的名称,比如,在第一共享库文件所对应的编译配置文件中不指定第二共享库文件的名称。

在这种情况下,如果使第一共享库文件所对应的源码文件先于第二共享库文件所对应的源码文件进行编译,则可保证编译过程的正常进行。但这种编程方式需要编程人员投入大量的精力去校验文件间的依赖关系,以在需要时对目标文件所对应的编译配置文件进行重新配置,编程复杂度较高。

需要指出的是,以上两种现有技术的实现方式,均需要编程人员根据文件间的依赖关系对各文件的编译顺序进行实时维护,这不仅会耗费较多的人工成本,而且编程效率和可靠性均会降低。

针对上述共享库文件循环调用的问题,本申请提出了一种文件编译方法,该方法不仅可以保证涉及这些循环依赖源码文件的所有编译过程正常执行,而且打破了现有技术实现方式中需要维护文件编译顺序的限制。

为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。

参见图1,图1是本申请一种文件编译方法的流程图,该流程图可以包括以下步骤:

步骤101:编译器接收编译指令,针对编译指令所提供的每一功能模块的路径,确定该路径下共享库文件所对应的编译配置文件。

本方法实施例中,编译指令可以通过多种方式为编译器提供每一功能模块的路径。

在本方法实施例的第一种实现方式中,编译指令可提供一模块清单的入口地址,该模块清单记录了每一功能模块的路径,且所记录的功能模块的路径可以任意顺序排列。有关模块清单中功能模块路径可以任意顺序排列的原因,将在后续实施例中加以说明,在此不再赘述。

在本方法实施例的第二种实现方式中,编译指令可直接携带每一功能模块的路径,以供编译器直接从所接收到的编译指令中获取所需功能模块的路径。

在本方法实施例中,编译指令可以是一个脚本文件,运行该脚本文件所获得的输出信号,将可作为编译器执行编译操作的开始标志。其中,上述输出信号,即可以理解为:该编译指令所提供的模块清单入口地址、或每一功能模块路径。

在本方法实施例中,上述功能模块可以理解为:用以实现系统功能的预配置文件或文件集。通常情况下,上述预配置文件可以为共享库文件;上述预配置文件集可以为多个共享库文件的集合、或共享库文件与可执行程序文件的集合,文件集中的每一文件均存放于相同的路径、且具备相近或相关的功能,用以配合完成该功能模块的所支持的系统功能。

本领域技术人员可以理解的是,每一目标文件均可以唯一对应一个编译配置文件。该编译配置文件用于辅助生成其所对应的目标文件,具体记录了该目标文件的名称、该目标文件所对应的一个或多个源码文件、以及该目标文件或其所对应源码文件与其它文件的依赖关系;在这一编译配置文件中,可以找到上述所有文件的文件路径,并由此查看该文件内部所记录的、本文件的自然更新时刻等信息。

本方法实施例中,编译器可以通过遍历每一功能模块的路径的方式,找到每一路径下共享库文件所对应的编译配置文件、并依次执行相应操作。

步骤102:编译器针对编译配置文件中记录的共享库文件名称,判断以该名称命名的文件是否存在,并在不存在的情况下,创建以该名称命名的软链接文件。

本方法实施例中,当在编译器所遍历到的功能模块路径下,保存的是一编程人员新创建一源码文件、即该源码文件从未被编译生成过其所对应的目标文件时,编译器将无法根据该目标文件所对应编译配置文件中记录的目标文件名称找到该目标文件。此时,编译器会在该路径下,创建一以该目标文件名称命名的软链接文件,且该软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于系统中任一源码文件所对应的自然更新时刻。

创建以目标文件命名的软链接文件的目在于:当这一新创建源码文件与另一新创建源码文件以动态链接的方式、形成相互依赖关系时,编译器可以在其中任一文件的保存路径下找到一与未生成目标文件同名、且已经编译完成的目标文件,以保证该编译过程的正常执行。其中软链接文件所指向的公共替身文件的生成方式可以为:编译一个为空的源码文件、且该源码文件不依赖任何其它源码文件。

上述预设编译完成时刻可以为系统所支持的最早时刻,比如,在大多数操作系统中,系统所支持的最早时刻为1970年1月1日零点。

步骤103:编译器针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻;如果是,则对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

本方法实施例中,编译器在每次接收到编程人员下达的编译指令后,都会执行以上步骤101和102,以保证每一功能模块路径下的每一共享库文件都存在其文件本身或与其文件本身同名的软链接文件。在此之后,编译器会再次对编译指令所提供的每一功能模块的路径进行遍历,本次遍历,编译器会针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的自然编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻,并在是时对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。由于前述步骤所创建软链接文件所指向的公共替身文件的编译时刻已预配置为一个比所有源码文件都早的预设编译完成时刻,所以上述所有软链接文件都会触发编译器的重编译机制,并被重编译的真正共享库文件覆盖。至此,每一功能模块路径下的共享库文件已经创建完成。

需要指出的是,本步骤中所述的编译完成时刻,可以为自然编译完成时刻,也可以为预设编译完成时刻;但在某一具体时刻下,每一文件有且仅有一个编译完成时刻。

由以上方法实施例可以看出,当接收到编译指令,并确定每一功能模块路径下尚未存在以编译配置文件中记录的共享库文件名称命名的文件时,编译器会创建一个以该名称命名的软链接文件,而由于软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于该共享库文件所对应源码文件的自然更新时刻,故会触发编译器对该共享库文件所对应源码文件的重新编译,在生成真正共享库文件的同时,覆盖掉与该真实共享库文件重名的软链接文件。则当系统中存在两个或多个共享库文件所对应的源码文件采用动态链接的方式循环依赖时,由于编译器在编译生成真正的共享库文件之前,已预先生成了与真正共享库文件同名的、且已编译完成的软链接文件,故会不引发因任一被依赖文件尚未编译而导致的编译失败,从而实现涉及这些循环依赖源码文件的所有编译过程正常执行。

参见图2,图2是本申请一种文件编译方法的一个实施例流程图。与前述方法实施例不同的是,本实施例以一个具体示例的方式,展示了本申请在解决共享库文件间循环调用时所存在的编译失败问题时的优势,且更具有实际操作意义。

假设编译指令中共提供了四个功能模块的路径,这些功能模块分别为模块A、模块B、模块C、模块D,且它们的路径依次为路径A、路径B、路径C、路径D。

其中,路径A可用于保存共享库文件1和可执行程序文件1;路径B可用于保存共享库文件2;路径C可用于保存共享库文件3;路径D可用于保存可执行程序文件2。且可执行程序文件1需要调用共享库文件1中的函数,共享库文件1和共享库文件2互相调用对方的函数,共享库文件3需要调用共享库文件2中的函数,可执行程序文件2需要调用共享库文件1、2、3中的函数;且假设上述每一文件均尚未生成。以下结合本示例详细阐述本申请的核心思想:

步骤201:创建一公共替身文件。

本实施例中,该公共替身文件为一合法的共享库文件,其本身并不包含任何有意义的函数实现,该文件的自然编译完成时刻可配置为1970年1月1日零点。

步骤202:创建一环境变量。

本实施例中,该环境变量可包含第一指示值和第二指示值。其中,第一指示值用以指示当前过程为软链接文件创建过程,第二指示值用以指示当前过程为共享库文件创建过程。该环境变量在整个编译流程中可见,可创建于每一编译配置文件的公共部分,也可创建于编译配置文件之外。

需要指出的是,由于步骤201与步骤202通常由人工完成,故未在图2中示出。

步骤203:编译器接收编译指令。

本实施例中,该编译指令可提供一模块清单的入口地址,该模块清单中记录有模块A、模块B、模块C、以及模块D的路径。

步骤204:编译器针对编译指令所提供的每一功能模块的路径,确定该路径下共享库文件所对应的编译配置文件。

本实施例中,本步骤所确定的编译配置文件具体为共享库文件1、共享库文件2、以及共享库文件3所对应的编译配置文件。

步骤205:编译器确认环境变量的指示值取值为第一指示值还是第二指示值,当其指示值为第一指示值时,执行步骤206;当其指示值为第二指示值时,执行步骤207。

本实施例中,环境变量指示值的默认取值为第一指示值,而其取值在编译流程中的变化在后续步骤均有体现,在此不再赘述。

步骤206:编译器针对编译配置文件中记录的共享库文件名称,判断以该名称命名的文件是否存在,并在不存在的情况下,创建以该名称命名的软链接文件。

本实施例中,编译器将具体判断上述共享库文件1、共享库文件2、以及共享库文件3是否存在,并在判断出上述文件均不存在时,分别创建软链接文件1、软链接文件2、以及软链接文件3。其中所创建的软链接文件与其对应的真正的共享库文件同名。

本实施例中,当上述文件存在时,编译器会继续遍历下一个功能模块的路径,并在遍历至清单终止标志时,将上述环境变量的指示值配置为第二指示值。

在此之后,编译器的固有逻辑会认为上述共享库文件1、共享库文件2、以及共享库文件3均已经创建完成。

步骤207:针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻;如果是,则对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

本实施例中,针对所找到的每一编译配置文件中记录的共享库文件名称,编译器会判断出以该名称命名的文件的自然编译完成时刻、即以该名称命名的软链接文件的编译完成时刻,早于该共享库文件所对应源码文件的自然更新时刻,故会对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

本实施例中,如果否,则继续遍历下一个功能模块的路径,并在遍历至清单终止标志时,直接执行以下步骤208。

至此,真正的共享库文件1、共享库文件2、以及共享库文件3已经创建完成。

步骤208:针对所找到的每一编译配置文件中记录的可执行程序文件的名称,判断以该名称命名的可执行程序文件是否存在;并在不存在,或者存在、但所存在的可执行程序文件的编译完成时刻早于该文件所对应的源码文件的自然更新时刻时,对该可执行程序文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

本实施例中,当上述文件存在、且所存在的可执行程序文件的自然编译完成时刻晚于该文件所对应的源码文件的自然更新时刻时,编译器会直接遍历下一个功能模块的路径,并在遍历至清单终止标志时,将上述环境变量的指示值配置为第一指示值。

至此,可执行程序文件1、可执行程序文件2已创建完成;即编译器完成了本实施例中对所有目标文件的创建。

由以上实施例可以看出,在本申请所提供的实现方式中,不论目标文件所对应的源码文件间是否存在循环依赖关系、或源码文件间的依赖关系如何复杂,编程人员都无需对功能模块路径的存放顺序进行限制。这不仅可以有效降低人工成本,也可同时提高编程人员的编程效率、以及程序运行时的可靠性。

与前述一种文件编译方法的实施例相对应,本申请还提供了一种文件编译装置的实施例。

参见图3,图3是本申请一种文件编译装置结构图。该装置可以包括:接收单元301、确定单元302、第一判断单元304、第一创建单元305、第二判断单元306、第二创建单元307。

其中,接收单元301,用于接收编译指令;

确定单元302,用于针对编译指令所提供的每一功能模块的路径,确定该路径下共享库文件所对应的编译配置文件,其中,功能模块为用以实现系统功能的预配置文件或文件集;

第一判断单元304,用于针对编译配置文件中记录的共享库文件名称,判断以该名称命名的文件是否存在;

第一创建单元305,用于在以该名称命名的文件不存在的情况下,创建以该名称命名的软链接文件;该软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于系统中任一源码文件所对应的自然更新时刻;

第二判断单元306,用于针对所找到的每一编译配置文件中记录的共享库文件名称,判断以该名称命名的文件的自然编译完成时刻是否早于该共享库文件所对应源码文件的自然更新时刻;

第二创建单元307,用于在第二判断单元306的判断结果为是时,对该共享库文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

在本实施例的第一种实现方式中,每一功能模块的路径记录于一模块清单,该模块清单的入口地址由所接收到的编译指令携带,且该模块清单所记录的功能模块的路径,以任意顺序排列。

在本实施例的第二种实现方式中,预设编译完成时刻为:系统所支持的最早时刻。

在本实施例的第三种实现方式中,上述装置还可以包括:第三判断单元308、第三创建单元309,具体可参见图4,图4是本申请一种文件编译装置的第二种结构图。

其中,第三判断单元308,用于针对所找到的每一编译配置文件中记录的可执行程序文件的名称,判断以该名称命名的可执行程序文件是否存在;

第三创建单元309,用于在可执行程序文件不存在,或者存在、但所存在的可执行程序文件的自然编译完成时刻早于该文件所对应的源码文件的自然更新时刻时,对该可执行程序文件所对应的源码文件进行编译,以创建该源码文件对应的共享库文件。

在本实施例的第四种实现方式中,上述装置还可以包括:变量创建单元300、确认单元303,具体可参见图5,图5是本申请一种文件编译装置的第三种结构图。

其中,变量创建单元300,用于创建一包含第一指示值和第二指示值的环境变量,第一指示值用以指示当前为软链接文件创建过程,第二指示值用以指示当前为共享库文件创建过程;

上述装置还可以包括:确认单元303,用于在确定该路径下共享库文件所对应的编译配置文件之后,确认环境变量的指示值取值,并根据确认出的指示值取值,对软链接文件或共享库文件进行创建。

由以上装置实施例可得,当接收到编译指令,并确定每一功能模块路径下尚未存在以编译配置文件中记录的共享库文件名称命名的文件时,编译器会创建一个以该名称命名的软链接文件,而由于软链接文件所指向的公共替身文件的自然编译完成时刻,已被配置为预设编译完成时刻,且该预设编译完成时刻早于该共享库文件所对应源码文件的自然更新时刻,故会触发编译器对该共享库文件所对应源码文件的重新编译,在生成真正共享库文件的同时,覆盖掉与该真实共享库文件重名的软链接文件。则当系统中存在两个或多个共享库文件所对应的源码文件采用动态链接的方式循环依赖时,由于编译器在编译生成真正的共享库文件之前,已预先生成了与真正共享库文件同名的、且已编译完成的软链接文件,故会不引发因任一被依赖文件尚未编译而导致的编译失败,从而实现涉及这些循环依赖源码文件的所有编译过程正常执行。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1