oracle删除依赖记录,删除未使用的依赖项

删除未使用的依赖项

显式的共享目标文件依赖项是指使用路径名或使用 –l 选项(更常用)在命令行定义的依赖项。显式依赖项包含可能由编译器驱动程序提供的依赖项,如 –lc。

隐式依赖项是显式依赖项的依赖项。可以将隐式依赖项处理为链接编辑的一部分,以完成所有符号解析的关闭。此符号关闭确保要生成的目标文件是自包含的,不保留未引用的符号。

所有动态目标文件都应定义其需要的依赖项。在生成动态可执行文件时,缺省情况下将实施此要求,而生成共享目标文件时则不会缺省实施。使用 –z defs 选项可在生成共享目标文件时实施此要求。

所有动态目标文件都应避免定义它们不需要的依赖项。在运行时装入此类未使用的依赖项是一种无谓和浪费的操作。

如果两个条件为真,则会判定显式依赖项是未使用的。

不会从要生成的目标文件中引用依赖项提供的全局符号。

该依赖项不会针对任何隐式依赖项的要求进行补偿。

可使用 –z guidance 选项诊断未使用的依赖项。应从链接编辑中删除这些依赖项。但是,如果删除这些项会产生问题,则可以使用 –z discard-unused=dependencies 选项从要生成的目标文件中丢弃未使用的依赖项。

遗憾的是,有些共享目标文件并未定义所有必要的依赖项。在这种情况下,开发者通常会将缺失的依赖项添加到可执行文件或他们正在生成的其他共享目标文件中,而非重新生成正确的原始依赖项。此类依赖项称为补偿依赖项。

例如,假设有一个共享目标文件 foo.so,它引用共享目标文件 bar.so 中的符号 bar()。但是,foo.so 并未表现出对 bar.so 的依赖性。对 foo.so 进行检查后发现缺少必要的依赖项,因为找不到 bar() 符号。

% ldd -r foo.so

libc.so.1 => /lib/libc.so.1

symbol not found: bar (foo.so)

现在假设某应用程序开发者希望创建一个引用共享目标文件 foo.so 中符号 foo() 的可执行文件。已指定所需的对 foo.so 的依赖性,但可执行文件的链接编辑失败。

% cc -Bdirect -o main main.c -L. -lfoo

Undefined first referenced

symbol in file

bar ./libfoo.so

ld: fatal: symbol referencing errors

开发者通过添加对 bar.so 的补偿依赖项来强制更正此情况。

% cc -Bdirect -o main main.c -L. -lfoo -lbar

此次更正创建了一个在运行时装入所有必要依赖项的应用程序,因此看上去这个问题已得到解决。然而,这个结果并不可靠。如果今后要传送 foo.so,并且不需要 bar.so 中的符号,则此应用程序仍将毫无缘由地装入 bar.so。更好的解决方案是通过添加缺失的依赖项 bar.so 来更正 foo.so。

可通过指导来诊断是否存在补偿依赖项。

% cc -Bdirect -zguidance -o main main.c -L. -lfoo -lbar

ld: guidance: removal of compensating dependency recommended: libbar.so

可通过指导来诊断补偿依赖项,但不会从 –z discard-unused=dependencies 下删除它们。尽管要创建的目标文件可能未使用依赖项,但其他链接编辑的组件可能会使用它。删除此依赖项可能会导致创建在运行时无法执行的目标文件。

系统性地使用 –z defs 选项可以消除对补偿依赖项的需求,以生成所有动态目标文件。

–z ignore 和 –z record 选项是可以与 –z discard-unused=dependencies 选项结合使用的位置选项。这些位置选项针对选定的目标文件有选择地打开和关闭丢弃功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值