CN107783765A - 文件编译方法和装置 - Google Patents
文件编译方法和装置 Download PDFInfo
- Publication number
- CN107783765A CN107783765A CN201710962791.XA CN201710962791A CN107783765A CN 107783765 A CN107783765 A CN 107783765A CN 201710962791 A CN201710962791 A CN 201710962791A CN 107783765 A CN107783765 A CN 107783765A
- Authority
- CN
- China
- Prior art keywords
- shared library
- file
- library file
- relied
- executable program
- 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
Classifications
-
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
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)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供一种文件编译方法和装置,包括:在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。本申请技术方案可以缩短编译时间,节省编译资源,并降低编译的复杂程度。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种文件编译方法和装置。
背景技术
Linux是一种主要由C语言实现的操作系统,广泛应用于各种计算机设备(如手机、平板电脑、路由器、数据中心服务器等)上。Linux系统中主要有两类包含程序代码的文件:可执行程序文件和共享库文件。Linux系统通过执行可执行程序文件来启动一个进程以完成特定的任务。不同的进程可能会调用相同的函数来实现相同的功能,例如:几乎所有进程都会涉及到内存管理,这些进程都会调用内存管理函数来实现内存管理功能。这些相同的函数通常封装在Linux系统的函数库文件中,这些函数库文件即称为共享库文件。
编译器用于将源码编译成Linux系统可用的可执行程序文件或共享库文件。通常,编译器在对即将编译的可执行程序文件进行编译时,会先判断该可执行程序文件中涉及的函数是否能在该可执行程序文件的源码及其所依赖的共享库文件的源码中查找到;其中,可执行程序文件涉及的函数包括该可执行程序文件本身调用的函数,以及该可执行程序文件所依赖的共享库文件调用的函数。因此,如果某一可执行程序文件需要对某一共享库文件中的函数进行调用,则需要在该可执行程序文件的Makefile中指定该共享库文件为该可执行程序文件的依赖文件,否则编译器在对该可执行程序文件进行编译时,会由于无法查找到该共享库中的函数而导致编译失败。
发明内容
有鉴于此,本申请提供一种文件编译方法和装置,具体地,本申请是通过如下技术方案实现的:
第一方面,本申请提供一种文件编译方法,所述方法包括:
在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;
将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;
在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
第二方面,本申请提供一种文件编译装置,其特征在于,所述装置包括:
获取单元,用于在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;
第一添加单元,用于将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;
编译单元,用于在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
分析上述技术方案可知,通过将可执行程序文件所依赖的第一共享库文件,以及该第一共享库文件所依赖的第二共享库文件都作为该可执行程序文件的依赖文件添加至该可执行程序文件的Makefile中的依赖项列表中,可以不要求对所有可执行程序文件和共享库文件按照依赖顺序进行编译,而仅要求在重新对某一共享库文件进行更新后,也重新对依赖项列表中包括该共享库文件的可执行程序文件进行更新。另一方面,针对某些源码并未发生变化的共享库文件,无需重新对该共享库文件进行更新,也可以及时发现由于无法找到涉及的函数而导致可执行程序文件编译失败的问题。采用这样的方式,不仅可以缩短编译时间,节省编译资源,还可以降低编译的复杂程度。
附图说明
图1是本申请一示例性实施例示出的一种文件编译方法的流程图;
图2是文件依赖关系的一种示例;
图3是本申请一示例性实施例示出的一种文件编译装置所在设备的硬件结构图;
图4是本申请一示例性实施例示出的一种文件编译装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
相关技术中,举例来说,假设可执行程序文件bin的Makefile中的依赖项列表中包括共享库文件A和共享库文件B(即可执行程序文件bin依赖于共享库文件A和共享库文件B,共享库文件A和共享库文件B均为可执行程序文件bin的依赖文件),可执行程序文件foo的Makefile中的依赖项列表中包括共享库文件A(即可执行程序文件foo依赖于共享库文件A,共享库文件A为可执行程序文件foo的依赖文件)。进一步假设所有可执行程序文件和共享库文件已完成一次编译,但由于可执行程序文件bin出现差错,技术人员对可执行程序文件bin所依赖的共享库文件A的源码进行了修改,在共享库文件A中新增了其对共享库文件B中的函数的调用,但技术人员未将共享库文件B作为共享库文件A的依赖文件,添加至共享库文件A的Makefile中的依赖项列表中。
后续,由于共享库文件A的源码发生变化,因此可以重新对共享库文件A进行编译;由于可执行程序文件bin、可执行程序文件foo以及共享库文件B的源码并未发生变化,因此不会重新对这三个文件进行编译。在这种情况下,如果所有可执行程序文件和共享库文件需要再次进行一次编译,则由于可执行程序文件bin依赖于共享库文件A和共享库文件B,因此对可执行程序文件bin的编译可以成功完成。另一方面,由于可执行程序文件foo仅依赖于共享库文件A,因此对可执行程序foo的编译则会由于查找不到可执行程序文件foo涉及的共享库文件B中的函数而导致编译失败。
为了及时发现由于无法找到涉及的函数而导致可执行程序文件编译失败的问题,可以在重新对源码发生变化的共享库文件进行编译后,也进一步地重新对依赖于该共享库文件的可执行程序文件和共享库文件进行编译。继续以上述举例为例,在重新对共享库文件A进行编译后,可以进一步地重新对依赖于共享库文件A的可执行程序文件bin和可执行程序文件foo进行编译。在这种情况下,由于可执行程序文件bin依赖于共享库文件A和共享库文件B,因此对可执行程序文件bin的编译可以成功完成。另一方面,由于可执行程序文件foo仅依赖于共享库文件A,因此对可执行程序foo的编译则会由于查找不到可执行程序文件foo涉及的共享库文件B中的函数而导致编译失败。此时,编译器可以向技术人员告警,并在告警信息中提示可执行程序文件foo涉及的共享库文件B中的函数名,从而提醒技术人员对可执行程序文件foo的Makefile或共享库文件A的Makefile进行修改,在其中的依赖项列表中添加共享库文件B。
在另一个例子中,假设可执行程序文件bin的Makefile中的依赖项列表中包括共享库文件A和共享库文件B,可执行程序文件foo的Makefile中的依赖项列表中包括共享库文件A,共享库文件A的Makefile中的依赖项列表中包括共享库文件C。进一步假设所有可执行程序文件和共享库文件已完成一次编译,但由于可执行程序文件bin出现差错,技术人员对共享库文件A所依赖的共享库文件C的源码进行了修改,在共享库文件C中新增了其对共享库文件B中的函数的调用,但技术人员未将共享库文件B作为共享库文件C的依赖文件,添加至共享库文件C的Makefile中的依赖项列表中。
后续,由于共享库文件C的源码发生变化,因此可以重新对共享库文件C进行编译。在重新对共享库文件C进行编译后,可以进一步地重新对依赖于共享库文件C的共享库文件A进行编译。同理,在重新对共享库文件A进行编译后,可以进一步地重新对依赖于共享库文件A的可执行程序文件bin和可执行程序文件foo进行编译。在这种情况下,由于可执行程序文件bin依赖于共享库文件A和共享库文件B,因此对可执行程序文件bin的编译可以成功完成。另一方面,由于可执行程序文件foo仅依赖于共享库文件A,因此对可执行程序foo的编译则会由于查找不到可执行程序文件foo涉及的共享库文件B中的函数而导致编译失败。此时,编译器可以向技术人员告警,并在告警信息中提示可执行程序文件foo涉及的共享库文件B中的函数名,从而提醒技术人员对可执行程序文件foo的Makefile或共享库文件C的Makefile进行修改,在其中的依赖项列表中添加共享库文件B。
然而,采用上述方式,要求对所有可执行程序文件和共享库文件按照依赖顺序进行编译,即对某一共享库文件的编译必须早于对依赖于该共享库文件的共享库文件或可执行程序文件的编译,在实际应用中较为复杂。另一方面,针对某些源码并未发生变化的共享库文件,也会由于其所依赖的共享库文件的源码发生变化而重新对其进行编译,延长了编译时间,浪费了编译资源。
为了解决上述问题,本申请提供一种文件编译方法和装置,以缩短编译时间,节省编译资源,并降低编译的复杂程度。
请参考图1,为本申请一示例性实施例示出的一种文件编译方法的流程图。该文件编译方法可以应用于编译器,包括如下步骤:
步骤101:在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件。
步骤102:将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中。
步骤103:在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
在本实施例中,与相关技术类似,技术人员可以通过编译器(如gcc等)提供的用户界面点击编译按钮,编译器在检测到点击编译按钮的动作时,即可视为接收到编译指令。
在接收到编译指令后,可以获取即将编译的可执行程序文件所依赖的第一共享库文件。具体地,可以基于编译工具(如make等),对该可执行程序文件的Makefile进行解析,将其中的内容解析成编译器可识别的编译命令。后续,可以从该编译命令中的编译参数中解析出该可执行程序文件所依赖的共享库文件,即第一共享库文件。
另一方面,在获取到该可执行程序文件所依赖的第一共享库文件后,可以进一步地获取该第一共享库文件所依赖的第二共享库文件。需要说明的是,第二共享库文件包括第一共享库文件直接依赖的共享库文件,以及第一共享库文件间接依赖的共享库文件。具体地,在获取该第一共享库文件所依赖的第二共享库文件时,可以先基于解析工具(如readelf等),对该第一共享库文件进行解析,从而可以获取该第一共享库文件直接依赖的共享库文件。后续,可以基于解析工具对该第一共享库文件直接依赖的共享库文件进行解析,从而可以获取该第一共享库文件间接依赖的共享库文件。进一步地,还可以基于解析工具对该第一共享库文件间接依赖的共享库文件进行解析,由于其所依赖的共享库文件也可以视为该第一共享库文件间接依赖的共享库文件,因此可以获取该第一共享库文件间接依赖的所有共享库文件。
在另一个例子中,可以构造共享库文件依赖关系表,并在对首个即将编译的可执行程序文件进行编译前,清空该共享库文件依赖关系表。
后续,在对即将编译的可执行程序文件进行编译时,可以在获取该可执行程序文件所依赖的第一共享库文件后,根据该第一共享库文件查找该共享库文件依赖关系表。如果该第一共享库文件命中该共享库文件依赖关系表,则可以基于该共享库文件依赖关系表获取该第一共享库文件所依赖的第二共享库文件。
另一方面,如果该第一共享库文件未命中所述共享库文件依赖关系表,则可以获取该第一共享库文件所依赖的第二共享库文件。具体地,可以采用上述方式获取该第一共享库文件所依赖的第二共享库文件。此外,还可以将该第一共享库文件与该第二共享库文件的依赖关系添加至该共享库文件依赖关系表中,以更新该共享库文件依赖关系表。
通常,在对可执行程序文件进行编译前,需要先对其所依赖的共享库文件进行编译。进一步地,如果在对上述可执行程序文件进行编译后,其所依赖的某个共享库文件的源码发生变化,则在重新对该共享库文件进行编译后,也可以重新对该可执行程序文件进行编译,以及时发现由于无法找到涉及的函数而导致可执行程序文件编译失败的问题。
请参考图2,为文件依赖关系的一种示例。其中,箭头表示依赖关系,举例来说,可执行程序文件foo到共享库文件A的箭头表示可执行程序文件foo依赖于共享库文件A;共享库文件C与共享库文件E之间的双向箭头表示共享库文件C依赖于共享库文件E,而共享库文件E也依赖于共享库文件C。
在对可执行程序文件foo进行编译时,可以先获取可执行程序文件foo所依赖的第一共享库文件,即共享库文件A和共享库文件B;再获取共享库文件A和共享库文件B所依赖的第二共享库文件,即共享库文件C、D、E、F、G。其中,共享库文件C为共享库文件A直接依赖的共享库文件,共享库文件D、共享库文件E和共享库文件F为共享库文件C直接依赖的共享库文件,共享库文件G为共享库文件D直接依赖的共享库文件,即共享库文件D、共享库文件E、共享库文件F和共享库文件G均为共享库文件A间接依赖的共享库文件。
在获取到可执行程序文件foo所依赖的第一共享库文件和第二共享库文件,即共享库文件A、B、C、D、E、F、G后,可以将这七个共享库文件作为依赖文件添加至可执行程序文件foo的Makefile中的依赖项列表中,并对可执行程序文件foo进行编译。后续,假设技术人员对共享库文件G的源码进行了修改,在共享库文件G中新增了其对共享库文件H中的函数的调用,但技术人员未将共享库文件H作为依赖文件添加至共享库文件G的Makefile中的依赖项列表中。由于共享库文件G的源码发生变化,因此可以重新对共享库文件G进行编译。在重新对共享库文件G进行编译后,可以进一步地重新对依赖于共享库文件G的可执行程序文件foo进行编译。由于可执行程序文件foo仅依赖于共享库文件A、B、C、D、E、F、G,因此对可执行程序foo的编译则会由于查找不到可执行程序文件foo涉及的共享库文件H中的函数而导致编译失败。此时,编译器可以向技术人员告警,并在告警信息中提示可执行程序文件foo涉及的共享库文件H中的函数名,从而提醒技术人员对可执行程序文件foo的Makefile或共享库文件G的Makefile进行修改,在其中的依赖项列表中添加共享库文件H。
在另一个例子中,可以构造共享库文件依赖关系表。假设可执行程序文件foo为首个即将编译的可执行程序文件,则在对可执行程序文件foo进行编译前,可以清空该共享库文件依赖关系表。后续,在对可执行程序文件foo进行编译时,可以将可执行程序文件foo的第一共享库文件与其第二共享库文件的依赖关系添加至该共享库文件依赖关系表中。此时,该共享库文件依赖关系表可以如下表1所示:
表1
而在对可执行程序文件bar进行编译时,可以先获取可执行程序文件bar所依赖的第一共享库文件为共享库文件D和共享库文件H。其中,共享库文件D命中表1所示的共享库文件依赖关系表,因此可以基于该共享库文件依赖关系表直接获取共享库文件D所依赖的第二共享库文件为共享库文件C、E、F、G。但由于共享库文件H未命中该共享库文件依赖关系表,因此可以获取共享库文件H所依赖的第二共享库文件。此外,还可以将共享库文件H与该第二共享库文件的依赖关系添加至该共享库文件依赖关系表中,以更新该共享库文件依赖关系表。此时,该共享库文件依赖关系表可以更新为如下表2所示:
共享库文件 | 所依赖的共享库文件 |
共享库文件A | 共享库文件C、D、E、F、G |
共享库文件B | |
共享库文件C | 共享库文件D、E、F、G |
共享库文件D | 共享库文件C、E、F、G |
共享库文件E | 共享库文件C、D、F、G |
共享库文件F | |
共享库文件G | |
共享库文件H |
表2
由上述实施例可见,通过将可执行程序文件所依赖的第一共享库文件,以及该第一共享库文件所依赖的第二共享库文件都作为该可执行程序文件的依赖文件添加至该可执行程序文件的Makefile中的依赖项列表中,可以不要求对所有可执行程序文件和共享库文件按照依赖顺序进行编译,而仅要求在重新对某一共享库文件进行更新后,也重新对依赖项列表中包括该共享库文件的可执行程序文件进行更新。另一方面,针对某些源码并未发生变化的共享库文件,无需重新对该共享库文件进行更新,也可以及时发现由于无法找到涉及的函数而导致可执行程序文件编译失败的问题。采用这样的方式,不仅可以缩短编译时间,节省编译资源,还可以降低编译的复杂程度。
与前述文件编译方法的实施例相对应,本申请还提供了文件编译装置的实施例。
本申请文件编译装置的实施例可以应用在编译器上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在编译器的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本申请文件编译装置所在编译器的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的编译器通常根据该文件编译的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图4,为本申请一示例性实施例示出的一种文件编译装置的框图。该装置400可以应用在图3所示的编译器上,包括:
获取单元401,用于在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;
第一添加单元402,用于将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;
编译单元403,用于在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
在一个可选的实施例中,所述获取单元301可以包括:
第一获取子单元4011,用于基于编译工具对即将编译的可执行程序文件的Makefile进行解析以获取编译命令,并对所述编译命令中的编译参数进行解析以获取所述可执行程序文件所依赖的第一共享库文件。
在另一个可选的实施例中,所述第一共享库文件所依赖的第二共享库文件可以包括:所述第一共享库文件直接依赖的共享库文件,以及所述第一共享库文件间接依赖的共享库文件;
所述获取单元401可以包括:
第二获取子单元4012,用于基于解析工具对所述第一共享库文件进行解析,以获取所述第一共享库文件直接依赖的共享库文件;
第三获取子单元4013,用于基于解析工具对所述第一共享库文件直接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件;
第四获取子单元4014,用于基于解析工具对所述第一共享库文件间接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件。
在另一个可选的实施例中,所述获取单元401可以包括:
查找子单元4015,用于根据所述第一共享库文件查找共享库文件依赖关系表;
第五获取子单元4016,用于在所述第一共享库文件命中所述共享库文件依赖关系表时,基于所述共享库文件依赖关系表获取所述第一共享库文件所依赖的第二共享库文件。
在另一个可选的实施例中,所述获取单元401还可以用于在所述第一共享库文件未命中所述共享库文件依赖关系表时,获取所述第一共享库文件所依赖的第二共享库文件;
所述装置400还可以包括:
第二添加单元404,用于将所述第一共享库文件与所述第二共享库文件的依赖关系添加至所述共享库文件依赖关系表中。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种文件编译方法,其特征在于,所述方法包括:
在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;
将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;
在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
2.根据权利要求1所述的方法,其特征在于,所述获取即将编译的可执行程序文件所依赖的第一共享库文件,包括:
基于编译工具对即将编译的可执行程序文件的Makefile进行解析以获取编译命令,并对所述编译命令中的编译参数进行解析以获取所述可执行程序文件所依赖的第一共享库文件。
3.根据权利要求1所述的方法,其特征在于,所述第一共享库文件所依赖的第二共享库文件包括:所述第一共享库文件直接依赖的共享库文件,以及所述第一共享库文件间接依赖的共享库文件;
所述获取所述第一共享库文件所依赖的第二共享库文件,包括:
基于解析工具对所述第一共享库文件进行解析,以获取所述第一共享库文件直接依赖的共享库文件;
基于解析工具对所述第一共享库文件直接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件;
基于解析工具对所述第一共享库文件间接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件。
4.根据权利要求1所述的方法,其特征在于,所述获取所述第一共享库文件所依赖的第二共享库文件,包括:
根据所述第一共享库文件查找共享库文件依赖关系表;
如果所述第一共享库文件命中所述共享库文件依赖关系表,则基于所述共享库文件依赖关系表获取所述第一共享库文件所依赖的第二共享库文件。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
如果所述第一共享库文件未命中所述共享库文件依赖关系表,则获取所述第一共享库文件所依赖的第二共享库文件;
将所述第一共享库文件与所述第二共享库文件的依赖关系添加至所述共享库文件依赖关系表中。
6.一种文件编译装置,其特征在于,所述装置包括:
获取单元,用于在接收到编译指令时,获取即将编译的可执行程序文件所依赖的第一共享库文件,并获取所述第一共享库文件所依赖的第二共享库文件;
第一添加单元,用于将所述第二共享库文件作为依赖文件添加至所述可执行程序文件的Makefile中的依赖项列表中;
编译单元,用于在检测到所述依赖文件的生成时间晚于所述可执行程序文件的生成时间时,重新对所述可执行程序文件进行编译。
7.根据权利要求6所述的装置,其特征在于,所述获取单元包括:
第一获取子单元,用于基于编译工具对即将编译的可执行程序文件的Makefile进行解析以获取编译命令,并对所述编译命令中的编译参数进行解析以获取所述可执行程序文件所依赖的第一共享库文件。
8.根据权利要求6所述的装置,其特征在于,所述第一共享库文件所依赖的第二共享库文件包括:所述第一共享库文件直接依赖的共享库文件,以及所述第一共享库文件间接依赖的共享库文件;
所述获取单元包括:
第二获取子单元,用于基于解析工具对所述第一共享库文件进行解析,以获取所述第一共享库文件直接依赖的共享库文件;
第三获取子单元,用于基于解析工具对所述第一共享库文件直接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件;
第四获取子单元,用于基于解析工具对所述第一共享库文件间接依赖的共享库文件进行解析,以获取所述第一共享库文件间接依赖的共享库文件。
9.根据权利要求6所述的装置,其特征在于,所述获取单元包括:
查找子单元,用于根据所述第一共享库文件查找共享库文件依赖关系表;
第五获取子单元,用于在所述第一共享库文件命中所述共享库文件依赖关系表时,基于所述共享库文件依赖关系表获取所述第一共享库文件所依赖的第二共享库文件。
10.根据权利要求9所述的装置,其特征在于,
所述获取单元还用于在所述第一共享库文件未命中所述共享库文件依赖关系表时,获取所述第一共享库文件所依赖的第二共享库文件;
所述装置还包括:
第二添加单元,用于将所述第一共享库文件与所述第二共享库文件的依赖关系添加至所述共享库文件依赖关系表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710962791.XA CN107783765A (zh) | 2017-10-17 | 2017-10-17 | 文件编译方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710962791.XA CN107783765A (zh) | 2017-10-17 | 2017-10-17 | 文件编译方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107783765A true CN107783765A (zh) | 2018-03-09 |
Family
ID=61433819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710962791.XA Pending CN107783765A (zh) | 2017-10-17 | 2017-10-17 | 文件编译方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107783765A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110333872A (zh) * | 2019-07-09 | 2019-10-15 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
CN110554876A (zh) * | 2018-05-31 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 用于编译安卓工程的方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090125873A1 (en) * | 2007-11-09 | 2009-05-14 | Sun Microsystems, Inc. | Using compiler commentary for configuring an integrated development environment |
CN103870310A (zh) * | 2014-02-18 | 2014-06-18 | 小米科技有限责任公司 | 程序编译方法及相关装置 |
CN106909434A (zh) * | 2017-02-28 | 2017-06-30 | 杭州迪普科技股份有限公司 | 可执行程序中未定义函数的检测方法及装置 |
-
2017
- 2017-10-17 CN CN201710962791.XA patent/CN107783765A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090125873A1 (en) * | 2007-11-09 | 2009-05-14 | Sun Microsystems, Inc. | Using compiler commentary for configuring an integrated development environment |
CN103870310A (zh) * | 2014-02-18 | 2014-06-18 | 小米科技有限责任公司 | 程序编译方法及相关装置 |
CN106909434A (zh) * | 2017-02-28 | 2017-06-30 | 杭州迪普科技股份有限公司 | 可执行程序中未定义函数的检测方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110554876A (zh) * | 2018-05-31 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 用于编译安卓工程的方法和装置 |
CN110333872A (zh) * | 2019-07-09 | 2019-10-15 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
CN110333872B (zh) * | 2019-07-09 | 2023-06-16 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Medeiros et al. | The love/hate relationship with the C preprocessor: An interview study | |
US20170371629A1 (en) | Method and system for providing source code suggestion to a user in real-time | |
Lin et al. | Automated forensic analysis of mobile applications on Android devices | |
CN1641583B (zh) | 自描述软件映象更新组件 | |
KR101687213B1 (ko) | 동적으로 로딩하는 그래프 기반 계산 | |
US20170214704A1 (en) | Method and device for feature extraction | |
US9652209B2 (en) | Static analysis and reconstruction of deep link handling in compiled applications | |
CN102200911A (zh) | 变量闭包 | |
CN102696026A (zh) | 带有增量改变的高效不可变句法表示 | |
CN104932980A (zh) | 软件自动测试方法及装置 | |
US9208322B1 (en) | Privacy leak detection in .NET framework | |
CN107562429A (zh) | 一种基于编译规则的Android系统静态划分方法 | |
Pérez‐Díaz et al. | Wirebrush4SPAM: a novel framework for improving efficiency on spam filtering services | |
Rahimian et al. | RESource: a framework for online matching of assembly with open source code | |
CN107783765A (zh) | 文件编译方法和装置 | |
Liguori et al. | Can we generate shellcodes via natural language? An empirical study | |
KR20180129623A (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN112069052A (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
Schulte et al. | GTIRB: intermediate representation for binaries | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
CN107451050B (zh) | 函数获取方法和装置、服务器 | |
Dramko et al. | DIRE and its data: Neural decompiled variable renamings with respect to software class | |
EP2756396B1 (en) | Simulation of static members and parameterized constructors on an interface-based api | |
EP3975021A1 (en) | Method and system for data flow monitoring to identify application security vulnerabilities and to detect and prevent attacks | |
US20190026649A1 (en) | System and method for generating a file execution record of address tuples |
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: 20180309 |
|
RJ01 | Rejection of invention patent application after publication |