appcert 实用程序对应用程序目标文件的分析结果会写入多个文件,这些文件位于 appcert 实用程序的工作目录中,通常为 /tmp。工作目录下的主要子目录是 appcert.pid,其中,pid 是此 appcert 实例的进程 ID。appcert 实用程序的结果会写入以下文件:
包含所检查的二进制对象与特定于此二进制对象的 appcert 输出所在子目录之间的映射。
包含运行 appcert 时使用 stdout 所显示的汇总报告的副本。
包含要求 appcert 检查但强制跳过的二进制对象的列表以及跳过每个二进制对象的原因。以下列表中列出了这些原因:
文件不是二进制对象
用户无法读取文件
文件名包含元字符
文件未设置执行位
appcert 检查的每个对象的 objects 子目录下都有一个单独的子目录。其中每个子目录均包含以下文件:
包含 appcert 怀疑为降级的 Solaris 符号的列表。
包含与对象直接绑定的专用 Solaris 符号的列表。
包含与对象直接绑定的公共 Solaris 符号的列表。
包含运行 ldd -r 时不是由动态链接程序绑定的符号的列表。另外,还包括 ldd 返回的包含 “file not found” 的行。
包含 appcert 检查的对象中的打印机格式的动态绑定摘要,其中包括每个 Solaris 库中使用的公共符号和专用符号表。
返回以下四个退出值之一。
appcert 未找到二进制不稳定性的潜在原因。
appcert 实用程序未成功运行。
appcert 检查的某些对象存在潜在的二进制稳定性问题。
appcert 实用程序未找到任何要检查的二进制对象。
使用专用符号-依赖专用符号的应用程序在与其开发发行版不同的 Solaris 发行版中可能无法运行。发生这种情况是因为,出现在给定 Solaris 发行版中的专用符号在其他发行版中可能具有不同的行为或者不存在。如果 appcert 报告应用程序中使用了专用符号,请重新编写应用程序,以避免使用专用符号。
降级符号-降级符号是 Solaris 库中已删除的函数或数据变量,也可以是在以后的 Solaris 发行版中作用域限定为局部的函数或数据变量。如果某个发行版的库未导出此符号,则直接调用此类符号的应用程序将无法在此发行版中运行。
非绑定符号-非绑定符号是指在 appcert 调用时动态链接程序无法解析的应用程序所引用的库符号。尽管非绑定符号并不始终指示二进制稳定性欠佳,但是非绑定符号可能会指示更严重的问题,如存在降级符号的依赖项。
过时库-将来的发行版中可能会从 Solaris 操作系统中删除过时的库。appcert 实用程序可用于标志此类库的所有使用情况。依赖此类库的应用程序在不支持此类库的将来发行版中可能无法正常运行。要避免此问题,请勿使用过时库中的接口。
使用 sys_errlist 或 sys_nerr-使用 sys_errlist 和 sys_nerr 符号可能会降低二进制稳定性。可能会在 sys_errlist 数组结尾后面进行引用。要避免此风险,请改用 strerror。
使用强符号和弱符号-与弱符号关联的强符号会保留作为专用符号,因为其行为在将来的 Solaris 发行版中可能会发生变化。应用程序只应直接引用弱符号。_socket 即是一个强符号示例,它与弱符号 socket 关联。