3

ld支持一些用于指定“OS X 上的向上依赖项”的选项。这里的向上依赖项是什么?

-upward-lx  This is the same as the -lx but specifies that the dylib is an upward dependency.
-upward_framework name[,suffix]
             This is the same as the -framework name[,suffix] but also specifies that the framework is an upward dependency.
4

1 回答 1

3

向上依赖是违背正常依赖顺序的东西。假设库“A”中的代码调用库“B”中实现的函数;库“A”依赖于“B”。现在假设库“B”还包含依赖于库“A”中某些内容的代码;这是一种向上的依赖(这通常是一件非常糟糕的事情)。

我认为如果您遇到这样的情况,那么您应该通过中介进行间接回调而不是依赖链接器来解决代码中的问题。

回调/中介方案的示例如下...

想象一下,库“A”中的代码仍然依赖于库“B”,但库“B”具有注册回调函数以执行特定操作的机制。作为中介的第三个模块可以安排库“A”中的函数通过库“B”的回调来调用,而不是让库“B”直接调用库“A”。链接器现在只需解决从“A”到“B”的依赖关系,并且在运行时伪造从“B”到“A”的受控关系,而不是在链接阶段需要向上依赖链。

于 2012-06-25T02:47:11.743 回答