CN106909434B - 可执行程序中未定义函数的检测方法及装置 - Google Patents
可执行程序中未定义函数的检测方法及装置 Download PDFInfo
- Publication number
- CN106909434B CN106909434B CN201710114915.9A CN201710114915A CN106909434B CN 106909434 B CN106909434 B CN 106909434B CN 201710114915 A CN201710114915 A CN 201710114915A CN 106909434 B CN106909434 B CN 106909434B
- Authority
- CN
- China
- Prior art keywords
- executable program
- shared library
- shared
- linked
- time point
- 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
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
本申请提供一种可执行程序中未定义函数的检测方法及装置,方法包括:当检测到有共享库更新,获取为可执行程序配置的依赖项中的共享库的更新时间点,并将最近更新时间点作为依赖项的更新时间点;若可执行程序的更新时间点早于依赖项的更新时间点,获取可执行程序链接的共享库和对应的函数列表;针对函数列表中每个函数,若函数在可执行程序的源码或可执行程序链接的共享库中均未定义,生成报错消息。本申请在检测到有共享库更新时,若可执行程序的更新时间点早于为其配置的依赖项中的共享库的最近更新时间点,则检查对应的函数列表中的函数是否有定义,从而使技术员及时发现未定义函数问题,避免由更新共享库而引入其它错误,以提高项目开发效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种可执行程序中未定义函数的检测方法及装置。
背景技术
通常Linux系统中包含的程序代码文件有可执行程序和共享库,如果可执行程序的源码有调用共享库中的函数,则在可执行程序的配置文件中会指定链接该共享库,表示可执行程序直接链接该共享库,由于该共享库也可能有调用另一共享库中的函数,因此在该共享库的配置文件中也会指定链接另一共享库,此时表示可执行程序间接链接另一共享库。编译器在编译可执行程序的源码创建该可执行程序时,需要检查该可执行程序涉及的所有函数(包括源码中的函数、直接或间接链接共享库中的函数)是否有定义。在项目工程中的一个可执行程序直接链接共享库A和共享库B,在该可执行程序出现问题,需要修改可对应的源码时,技术人员可能会在直接链接的共享库A中新增对共享库B中函数(例如,函数1)的调用,而忘记在共享库A的配置文件中添加对共享库B的链接,以修复该可执行程序的问题,然后将项目工程的所有源码提交到代码服务器。当其他技术人员读取该项目工程的源码进行编译时,由于该可执行程序有链接共享库A和共享库B,因此编译对应的源码不会出现问题,而如果有另一可执行程序直接链接共享库A,而未直接或间接链接共享库B,由于共享库A有调用共享库B中的函数,因此,编译器在编译另一可执行程序,检查另一可执行程序涉及的所有函数是否有定义时,无法从直接或间接链接的共享库中找到函数1的定义,导致编译失败的问题。
在相关技术中,要求技术人员在对某一源码修改后,必须将本地已编译创建的可执行程序和共享库全部删除,使编译器重新执行一遍所有源码的编译过程,确保每个共享库和可执行程序的源码都会被重新编译,从而能够当场发现找不到函数定义的问题,并进行问题定位,在相应的配置文件中添加指定链接的共享库,然后再将项目工程的源码提交到代码服务器以供其他技术人员使用。然而,在一个项目工程中,可执行程序和共享库的数量成百上千,如果技术人员每修改一个问题,就将本地的所有源码全部重新编译一遍,必将耗费很长的时间,降低了项目工程的开发效率。
发明内容
有鉴于此,本申请提供一种可执行程序中未定义函数的检测方法及装置,以解决现有实现方式会降低项目工程的开发效率的问题。
根据本申请实施例的第一方面,提供一种可执行程序中未定义函数的检测方法,所述方法包括:
当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点;
若所述可执行程序的更新时间点早于所述依赖项的更新时间点,则获取所述可执行程序所链接的共享库,并获取所述可执行程序对应的函数列表;
针对所述函数列表中的每个函数,若该函数在所述可执行程序的源码中或者所述可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示所述报错消息。
根据本申请实施例的第二方面,提供一种可执行程序中未定义函数的检测装置,所述装置包括:
第一获取模块,用于当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点;
第二获取模块,用于若所述可执行程序的更新时间点早于所述依赖项的更新时间点,则获取所述可执行程序所链接的共享库,并获取所述可执行程序对应的函数列表;
检查模块,用于针对所述函数列表中的每个函数,若该函数在所述可执行程序的源码中或者所述可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示所述报错消息。
应用本申请实施例,当检测到有共享库更新时,网络设备可以针对每个可执行程序,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点,若该可执行程序的更新时间点早于该依赖项的更新时间点,则获取该可执行程序所链接的共享库,并获取该可执行程序对应的函数列表,针对函数列表中的每个函数,若该函数在该可执行程序的源码中或者该可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示该报错消息。基于上述实现方式,通过预先配置可执行程序的依赖项,使可执行程序能够实现对直接链接共享库的动态依赖,因此,在检测到有共享库更新时,如果依赖项中记录有该共享库,则即可确保该共享库的更新时间点即为依赖项最近的更新时间点,并且若可执行程序的更新时间点早于该最近的更新时间点,则触发可执行程序的重新编译过程,并检查对应的函数列表中的每个函数是否存在定义,如果有未定义的函数,显示报错消息,从而使技术人员能够及时发现未定义函数的问题,避免由于更新共享库而引入其它错误。该实现方式无须增加任何额外修改,便可通过现有的编译过程实现在有共享库更新时,检查出未定义函数的问题,简化了程序源码结构和编程过程,从而提高了项目工程的开发效率。
附图说明
图1为本申请根据一示例性实施例示出的一种可执行程序中未定义函数的检测方法的实施例流程图;
图2为本申请根据一示例性实施例示出的一种网络设备的硬件结构图;
图3为本申请根据一示例性实施例示出的一种可执行程序中未定义函数的检测装置的实施例结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1为本申请根据一示例性实施例示出的一种可执行程序中未定义函数的检测方法的实施例流程图,该可执行程序中未定义函数的检测方法可以应用于网络设备,所述网络设备可以是计算机、平板电脑、路由器等设备。如图1所示,该可执行程序中未定义函数的检测方法包括如下步骤:
步骤101:当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为该依赖项的更新时间点。
在执行步骤101之前,针对预先为可执行程序配置依赖项的过程,网络设备可以在项目工程的第一次编译过程中,针对项目工程中的每个可执行程序,读取该可执行程序对应的编译命令的参数,并对该参数进行反向解析,提取直接链接的共享库,并将提取到的共享库添加到依赖项中。从而,提取到的直接链接的共享库作为可执行程序的依赖文件被添加到了依赖项中,在可执行程序的第一次编译过程中即可实现依赖项的自动配置,并且不需要技术人员进行干预。
其中,由于依赖项指的是目标所依赖的文件,通常若目标的更新时间点早于它依赖的文件的更新时间点,则会触发目标执行指定的操作,例如目标重新被编译,因此为了确保共享库更新能够触发依赖该共享库的可执行程序重新被创建,因此网络设备可以将可执行程序直接链接的共享库添加到依赖项中。由于网络设备的编译器在对该可执行程序的源码进行编译时,会将源码解析成编译器可以识别的编译命令(例如,shell语言),而该编译命令的参数中携带有直接链接的共享库,并且也携带这些直接链接的共享库的目录路径,因此可以对该编译命令的参数进行反向解析,以提取带有目录路径的直接链接的共享库。例如,某可执行程序直接链接的共享库有liba.so、libb.so以及libc.so,这些共享库被编译创建之后均放在同一目录路径下:/usr/local/lib/,从而提取到的直接链接的共享库有:/usr/local/lib/liba.so、/usr/local/lib/libb.so、/usr/local/lib/libc.so。此外,由于有的共享库的配置文件也会指定链接其它共享库,因此为了确保共享库更新能够触发依赖该共享库的共享库能够重新被创建,因此网络设备也可以将每个共享库直接链接的共享库添加到对应依赖项中。
在一实施例中,由于网络设备在对某一共享库的源码进行修改之后,需要重新编译一次修改后的源码,以更新该共享库,因此共享库的源码修改可以触发编译器重新编译该修改后的源码,重新创建该共享库,并将该共享库的更新时间点对应记录下来,从而在该共享库重新创建成功之后,便可以检测到共享库更新。
在另一实施例中,由于共享库每更新一次,均会将最新的更新时间点对应记录下来,因此,网络设备在检测到有共享库更新时,针对每个可执行程序,可以先获取可执行程序对应的预先配置的依赖项,并从获取依赖项中的共享库,并读取每个共享库的更新时间点,并将最近的更新时间点作为该依赖项的更新时间点。
其中,为了确保依赖项的更新时间点始终为最新的时间点,因此每次检测到有共享库更新时,网络设备都要确定一次依赖项的更新时间点。从而,可以确保在共享库的更新时间点比直对应的可执行程序的更新时间点新时,触发该可执行程序被重新编译。此外,该依赖项中还可以将可执行程序的源码文件添加进来,以确保源码文件被更新也会触发对应的可执行程序重新被创建,此时,依赖项的更新时间点的确定还需要将源码文件的更新时间点与每个共享库的更新时间点一起进行比较,以将最近的更新时间点作为该依赖项的更新时间点。
步骤102:若该可执行程序的更新时间点早于该依赖项的更新时间点,则获取该可执行程序所链接的共享库,并获取该可执行程序对应的函数列表。
在一实施例中,若可执行程序的更新时间点早于依赖项的更新时间点,则触发可执行程序的重新编译过程,网络设备可以通过编译器获取该可执行程序对应的函数列表,并获取该可执行程序所链接的共享库,为重新编译做准备。
在另一实施例中,针对获取可执行程序所链接的共享库的过程,网络设备从该可执行程序对应的配置文件中读取指定链接的第一共享库,并将该第一共享库确定为该可执行程序直接链接的共享库,然后再从该第一共享库对应的配置文件中读取指定链接的第二共享库,并将该第二共享库确定为该可执行程序间接链接的共享库,最后将直接链接的共享库和间接链接的共享库确定为该可执行程序所链接的共享库。
其中,项目工程中的可执行程序和共享库可以统称为目标文件,且每个目标文件均对应有一个配置文件,该配置文件中会指定目标文件名称、目标文件类型(共享库、可执行程序或者其它)、指定直接链接的共享库、需要的源码文件、目标文件的依赖项等信息,因此,网络设备可以通过编译器从可执行程序对应的配置文件中读取到指定链接的共享库(相对于可执行程序为直接链接的共享库),并从直连链接的共享库对应的配置文件中读取到指定链接的共享库(相对于可执行程序为间接链接的共享库)。
在一示例性场景中,可执行程序bin对应的配置文件中指定链接的共享库有liba.so、libb.so,而共享库liba.so对应的配置文件中指定链接的共享库有libc.so、libd.so,因此,可执行程序bin直接链接的共享库为liba.so、libb.so、间接链接的共享库为libc.so、libd.so。
在又一实施例中,网络设备还可以通过编译器获取可执行程序涉及到的所有函数,除了可执行程序的源码中的函数,还会加载所链接的共享库的中的所有函数,因此,获取到的函数列表中记录有可执行程序的源码中的函数和所链接的共享库中的函数(直连链接的共享库和间接链接的共享库)。
步骤103:针对该函数列表中的每个函数,若该函数在该可执行程序的源码中或者该可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示该报错消息。
在一实施例中,网络设备可以通过编译器对可执行程序所涉及函数的检查机制,对获取到的函数列表中的每个函数进行检查,检查该函数在可执行程序的源码中或者所链接的共享库中是否存在定义。若存在,则继续对函数列表中的下一个函数进行检查,若不存在,则生成用于提示该函数未定义的报错消息,并显示该报错消息,以使技术人员根据显示的未定义函数定位该函数所属的共享库,并在调用该未定义函数的可执行程序的配置文件中添加对该未定义函数所属共享库的链接,或者在调用该未定义函数的共享库的配置文件中添加对该未定义函数所属共享库的链接。
在一示例性的场景中,针对直接链接的情况:某一项目工程已经完成一次编译过程,其包含的可执行程序有可执行程序A和可执行程序B;共享库有libD.so、libC.so。其中,可执行程序A的配置文件中指定链接的共享库有libC.so和libD.so,可执行程序B的配置文件中指定链接的共享库有libC.so,因此可执行程序A的依赖项中记录有libC.so和libD.so,可执行程序B的依赖项中记录有libC.so。当技术人员发现可执行程序A出现问题而修改共享库libC.so的源码,使libC.so新增对libD.so中函数func的调用,并触发libC.so重新创建,但忘记在libC.so的配置文件中添加对libD.so的链接,从而网络设备在检测到libC.so更新时,针对可执行程序A,由于libC.so的更新时间点为最近的更新时间点,并且比可执行程序A的更新时间点新,因此会触发可执行程序A重新被编译,并检查可执行程序A涉及到的所有函数,由于libC.so新增对libD.so中函数func的调用,因此可执行程序A涉及到的所有函数会包括func函数,由于可执行程序A已指定链接了libD.so,因此函数检查不会出现报错,重新编译成功;而针对可执行程序B,由于libC.so的更新时间点为最近的更新时间点,并且比可执行程序B的更新时间点新,因此会触发可执行程序B重新被编译,并检查可执行程序B涉及到的所有函数,由于libC.so新增对libD.so中函数func的调用,因此可执行程序B涉及到的所有函数会包括func函数,而可执行程序B的配置文件并未指定链接libD.so,libC.so的配置文件也并未指定链接libD.so,因此,当检查到func函数时,会显示该func函数未定义的报错消息,从而技术人员可以在调用func函数的共享库libC.so的配置文件中添加对func函数所属共享库libD.so的链接。
在另一示例性的场景中,针对间接链接的情况:某一项目工程已经完成一次编译过程,其包含的可执行程序有可执行程序A和可执行程序B;共享库有libC.so、libD.so、libE.so。其中,可执行程序A的配置文件中指定链接的共享库有libC.so和libE.so,可执行程序B的配置文件中指定链接的共享库有libC.so,而共享库libC.so的配置文件中指定链接的共享库有libD.so,因此可执行程序A的依赖项中记录有libC.so和libE.so,可执行程序B的依赖项中记录有libC.so,并且可执行程序A和可执行程序B均间接链接共享库libD.so。当技术人员发现可执行程序A出现问题而修改共享库libD.so的源码,使libD.so新增对libE.so中函数func的调用,而忘记在libD.so的配置文件中添加对libE.so的链接,在触发libD.so重新创建之后,网络设备检测到libD.so有更新,由于可执行程序A和可执行程序B各自的更新时间点均比各自依赖项的更新时间点新,因此不会触发重新创建,而共享库libC.so的更新时间点却早于其依赖项的更新时间点,从而会触发重新创建libC.so(编译器重新创建共享库,不进行函数定义检查过程,因此libC.so会创建成功),网络设备在检测到libC.so更新时,针对可执行程序A,由于libC.so的更新时间点为最近的更新时间点,可以作为可执行程序A的依赖项的更新时间点,并且比可执行程序A的更新时间点新,因此会触发可执行程序A重新被编译,检查可执行程序A涉及到的所有函数,由于间接链接的libD.so新增对libE.so中函数func的调用,因此可执行程序A涉及到的所有函数会包括func函数,由于可执行程序A已指定链接了libE.so,因此函数检查不会出现报错,重新编译成功;而针对可执行程序B,由于libC.so的更新时间点为最近的更新时间点,可以作为可执行程序B的依赖项的更新时间点,并且比可执行程序B的更新时间点新,因此会触发可执行程序B重新被编译,检查可执行程序B涉及到的所有函数,由于libD.so新增对libE.so中函数func的调用,因此可执行程序B涉及到的所有函数会包括func函数,而可执行程序B的配置文件并未指定链接libE.so,libD.so的配置文件也并未指定链接libE.so,因此,当检查到func函数时,会显示该func函数未定义的报错消息,从而技术人员可以在调用func函数的共享库libD.so的配置文件中添加对func函数所属共享库libE.so的链接,也可以在可执行程序B的配置文件中添加对func函数所属共享库libE.so的链接。
由上述实施例可知,当检测到有共享库更新时,网络设备可以针对每个可执行程序,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点,若该可执行程序的更新时间点早于该依赖项的更新时间点,则获取该可执行程序所链接的共享库,并获取该可执行程序对应的函数列表,针对函数列表中的每个函数,若该函数在该可执行程序的源码中或者该可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示该报错消息。基于上述实现方式,通过预先配置可执行程序的依赖项,使可执行程序能够实现对直接链接的共享库的动态依赖,因此,在检测到有共享库更新时,如果依赖项中记录有该共享库,则即可确保该共享库的更新时间点即为依赖项最近的更新时间点,并且若可执行程序的更新时间点早于该最近的更新时间点,则触发可执行程序的重新编译过程,并检查对应的函数列表中的每个函数是否存在定义,如果不存在定义时,显示报错消息,从而使技术人员能够及时发现存在未定义函数的问题,避免由于更新共享库,而引入其它错误。该实现方式无须增加任何额外修改,便可通过现有的编译过程实现在有共享库更新时,检查出未定义函数的问题,简化了程序源码结构和编程过程,从而提高了项目工程的开发效率。
与前述可执行程序中未定义函数的检测方法的实施例相对应,本申请还提供了可执行程序中未定义函数的检测装置的实施例。
本申请可执行程序中未定义函数的检测装置的实施例可以应用在网络设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图2所示,为本申请根据一示例性实施例示出的一种网络设备的硬件结构图,除了图2所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
图3为本申请根据一示例性实施例示出的一种可执行程序中未定义函数的检测装置的实施例结构图,该可执行程序中未定义函数的检测装置可以应用于网络设备,如图3所示,该可执行程序中未定义函数的检测装置包括:第一获取模块310、第二获取模块320以及检查模块330。
其中,第一获取模块310,用于当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点;
第二获取模块320,用于若所述可执行程序的更新时间点早于所述依赖项的更新时间点,则获取所述可执行程序所链接的共享库,并获取所述可执行程序对应的函数列表;
检查模块330,用于针对所述函数列表中的每个函数,若该函数在所述可执行程序的源码中或者所述可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示所述报错消息。
在一可选的实现方式中,所述第二获取模块320,具体用于在获取所述可执行程序所链接的共享库的过程中,从所述可执行程序对应的配置文件中读取指定链接的第一共享库,并将所述第一共享库确定为所述可执行程序直接链接的共享库;从所述第一共享库对应的配置文件中读取指定链接的第二共享库,并将所述第二共享库确定为所述可执行程序间接链接的共享库;将所述直接链接的共享库和所述间接链接的共享库确定为所述可执行程序所链接的共享库。
在一可选的实现方式中,所述装置还包括(图3中未示出):
配置模块,用于为可执行程序配置依赖项;
所述配置模块,具体用于读取所述可执行程序对应的编译命令的参数;对所述参数进行反向解析,并提取直接链接的共享库;将提取到的共享库添加到所述依赖项中。
在一可选的实现方式中,所述函数列表中记录有所述可执行程序的源码中的函数、所链接的共享库中的函数。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (8)
1.一种可执行程序中未定义函数的检测方法,其特征在于,所述方法包括:
当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点;其中,所述共享库更新包括所述共享库对应的依赖项中新增对其它共享库中函数的调用,所述预先配置的依赖项中的共享库包括直接链接的共享库,所述直接链接的共享库由读取所述可执行程序对应的编译命令的参数后,对所述参数进行反向解析所获得,而每个共享库直接链接的共享库添加到所述每个共享库预先配置的依赖项中;
若所述可执行程序的更新时间点早于所述依赖项的更新时间点,则获取所述可执行程序所链接的共享库,并获取所述可执行程序对应的函数列表;
针对所述函数列表中的每个函数,若该函数在所述可执行程序的源码中或者所述可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示所述报错消息。
2.根据权利要求1所述的方法,其特征在于,所述获取所述可执行程序所链接的共享库,包括:
从所述可执行程序对应的配置文件中读取指定链接的第一共享库,并将所述第一共享库确定为所述可执行程序直接链接的共享库;
从所述第一共享库对应的配置文件中读取指定链接的第二共享库,并将所述第二共享库确定为所述可执行程序间接链接的共享库;
将所述直接链接的共享库和所述间接链接的共享库确定为所述可执行程序所链接的共享库。
3.根据权利要求2所述的方法,其特征在于,为可执行程序配置依赖项,包括:
读取所述可执行程序对应的编译命令的参数;
对所述参数进行反向解析,并提取直接链接的共享库;
将提取到的共享库添加到所述依赖项中。
4.根据权利要求1所述的方法,其特征在于,所述函数列表中记录有所述可执行程序的源码中的函数、所链接的共享库中的函数。
5.一种可执行程序中未定义函数的检测装置,其特征在于,所述装置包括:
第一获取模块,用于当检测到有共享库更新时,获取为可执行程序预先配置的依赖项中的共享库的更新时间点,并将最近的更新时间点作为所述依赖项的更新时间点;其中,所述共享库更新包括所述共享库对应的依赖项中新增对其它共享库中函数的调用,所述预先配置的依赖项中的共享库包括直接链接的共享库,所述直接链接的共享库由读取所述可执行程序对应的编译命令的参数后,对所述参数进行反向解析所获得,而每个共享库直接链接的共享库添加到所述每个共享库预先配置的依赖项中;
第二获取模块,用于若所述可执行程序的更新时间点早于所述依赖项的更新时间点,则获取所述可执行程序所链接的共享库,并获取所述可执行程序对应的函数列表;
检查模块,用于针对所述函数列表中的每个函数,若该函数在所述可执行程序的源码中或者所述可执行程序所链接的共享库中均未定义,则生成用于提示该函数未定义的报错消息,并显示所述报错消息。
6.根据权利要求5所述的装置,其特征在于,所述第二获取模块,具体用于在获取所述可执行程序所链接的共享库的过程中,从所述可执行程序对应的配置文件中读取指定链接的第一共享库,并将所述第一共享库确定为直接链接的共享库;从所述第一共享库对应的配置文件中读取指定链接的第二共享库,并将所述第二共享库确定为间接链接的共享库;将所述直接链接的共享库和所述间接链接的共享库确定为所述可执行程序所链接的共享库。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
配置模块,用于为可执行程序配置依赖项;
所述配置模块,具体用于读取所述可执行程序对应的编译命令的参数;对所述参数进行反向解析,并提取直接链接的共享库;将提取到的共享库添加到所述依赖项中。
8.根据权利要求5所述的装置,其特征在于,所述函数列表中记录有所述可执行程序的源码中的函数、所链接的共享库中的函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710114915.9A CN106909434B (zh) | 2017-02-28 | 2017-02-28 | 可执行程序中未定义函数的检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710114915.9A CN106909434B (zh) | 2017-02-28 | 2017-02-28 | 可执行程序中未定义函数的检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106909434A CN106909434A (zh) | 2017-06-30 |
CN106909434B true CN106909434B (zh) | 2020-04-03 |
Family
ID=59208220
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710114915.9A Active CN106909434B (zh) | 2017-02-28 | 2017-02-28 | 可执行程序中未定义函数的检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106909434B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107783765A (zh) * | 2017-10-17 | 2018-03-09 | 杭州迪普科技股份有限公司 | 文件编译方法和装置 |
CN111124478A (zh) * | 2019-12-19 | 2020-05-08 | 杭州迪普科技股份有限公司 | 版本管理方法及装置 |
CN113296777B (zh) * | 2020-04-10 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 依赖分析和程序编译方法、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187899A (zh) * | 2006-11-17 | 2008-05-28 | 中兴通讯股份有限公司 | 嵌入式系统存储空间的优化方法 |
CN103034486A (zh) * | 2012-11-28 | 2013-04-10 | 清华大学 | 移动终端操作系统基于全系统扩展调用图的自动优化方法 |
CN105260169A (zh) * | 2014-07-16 | 2016-01-20 | 中兴通讯股份有限公司 | 一种跨平台移植python程序的方法及装置 |
-
2017
- 2017-02-28 CN CN201710114915.9A patent/CN106909434B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187899A (zh) * | 2006-11-17 | 2008-05-28 | 中兴通讯股份有限公司 | 嵌入式系统存储空间的优化方法 |
CN103034486A (zh) * | 2012-11-28 | 2013-04-10 | 清华大学 | 移动终端操作系统基于全系统扩展调用图的自动优化方法 |
CN105260169A (zh) * | 2014-07-16 | 2016-01-20 | 中兴通讯股份有限公司 | 一种跨平台移植python程序的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106909434A (zh) | 2017-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3769223B1 (en) | Unified test automation system | |
US10019256B2 (en) | Systems and methods for incremental software development | |
CN106339312B (zh) | Api测试方法和系统 | |
EP3265916B1 (en) | A method for identifying a cause for a failure of a test | |
CN107678748B (zh) | 一种源代码文件编译方法及装置 | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
US10579513B2 (en) | Test run control method and apparatus | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN109840194B (zh) | 一种配置文件的检测方法及系统 | |
CN106909434B (zh) | 可执行程序中未定义函数的检测方法及装置 | |
Zech et al. | A generic platform for model-based regression testing | |
EP3514680B1 (en) | Identification of changes in functional behavior and runtime behavior of a system during maintenance cycles | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
CN114816437A (zh) | 一种逆向生成Java实体类的方法、系统和设备 | |
CN113568834A (zh) | Sdk代码的兼容性检测方法、装置、计算机设备和介质 | |
CN115168175A (zh) | 程序错误解决方法、装置、电子设备和存储介质 | |
CN113672269B (zh) | 数据处理方法、系统、电子设备及程序产品 | |
CN113688028A (zh) | 代码提交方法和装置 | |
CN111367796A (zh) | 应用程序调试方法及装置 | |
CN110737429A (zh) | 一种利用Makefile自身的依赖关系的模块化编译方法和装置 | |
CN112882720B (zh) | 一种编译方法及装置 | |
EP2503451A2 (en) | Metadata for single development test environment | |
JP2012093879A (ja) | 自動ビルドシステム及び自動ビルド方法 | |
CN114780097A (zh) | 软件集成方法、装置、存储介质及电子设备 | |
CN117667643A (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 |