当前位置: 首页 > 面试题库 >

通过链接相同的库两次来解决循环依赖性?

戈嘉慕
2023-03-14
问题内容

我们有一个分为静态库的代码库。不幸的是,这些库具有循环依赖关系。例如,libfoo.a取决于,libbar.a反之亦然。

我知道处理此问题的“正确”方法是使用链接器--start-group--end-group选项,如下所示:

g++ -o myApp -Wl,--start-group -lfoo -lbar -Wl,--end-group

但是在我们现有的Makefile文件中,问题通常是这样处理的:

g++ -o myApp -lfoo -lbar -lfoo

(想象一下,它扩展到了约20个具有相互依赖关系的库。)

我一直在研究Makefile,将第二种格式更改为第一种,但是现在我的同事问我为什么…除了“因为它更干净”和模糊的感觉,另一种格式有风险之外,我没有有一个很好的答案。

那么,多次链接同一个库 是否会
造成问题?例如,如果相同的.o被拉入两次,则链接是否会失败并带有多个已定义的符号?还是有风险我们可以使用同一静态对象的两个副本来完成,从而产生细微的错误?

基本上,我想知道多次链接同一库是否存在链接时或运行时失败的可能性;如果是这样,如何触发它们。谢谢。


问题答案:

我所能提供的只是缺乏反例。实际上,我以前从未见过第一种形式(即使它显然更好),并且总是看到第二种形式可以解决此问题,因此也没有观察到问题。

即使这样,我仍然建议更改为第一种形式,因为它清楚地显示了库之间的关系,而不是依赖于链接器的特定行为。

话虽如此,我建议至少考虑是否有可能重构代码以将通用代码提取到其他库中。



 类似资料:
  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!

  • 问题内容: 我正在将Java项目从Ant迁移到Gradle。我认为最好的解决方案是使用Gradle的多项目支持,但是我找不到摆脱循环依赖的方法。 原始项目已设置为具有以下布局: 之间的关系,并且,是棘手的。将取决于或根据配置文件。同样,无论配置属性如何,都依赖和。并且永远不会在同一时间建造。 我认为一种快速的解决方案是在: 接下来,我想过要找到一种方法来使之更接近公正工作。这导致我想到了这一点:

  • 本文向大家介绍详解Spring Bean的循环依赖解决方案,包括了详解Spring Bean的循环依赖解决方案的使用技巧和注意事项,需要的朋友参考一下 如果使用构造函数注入,则可能会创建一个无法解析的循环依赖场景。 什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: 注意,这里不是函数的循环调用,

  • 本文向大家介绍Spring中循环依赖的解决方法详析,包括了Spring中循环依赖的解决方法详析的使用技巧和注意事项,需要的朋友参考一下 前言 说起Spring中循环依赖的解决办法,相信很多园友们都或多或少的知道一些,但当真的要详细说明的时候,可能又没法一下将它讲清楚。本文就试着尽自己所能,对此做出一个较详细的解读。另,需注意一点,下文中会出现类的实例化跟类的初始化两个短语,为怕园友迷惑,事先声明一

  • 问题内容: 以下产生。我该如何解决? 问题答案: 您可以通过为尚未定义的类使用 字符串 名称来使用前向引用: __ 从Python 3.7开始 ,您还可以通过在模块顶部添加以下导入来推迟注释的 所有 运行时解析: 此时,注释将作为表达式的抽象语法树的字符串表示形式存储;您可以用来解决这些问题(并解决上面使用的前向引用)。 有关详细信息,请参见 PEP 563-批注的延迟评估 ;此行为将是Pytho

  • 本文向大家介绍详解Spring-bean的循环依赖以及解决方式,包括了详解Spring-bean的循环依赖以及解决方式的使用技巧和注意事项,需要的朋友参考一下 本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中。 1. 什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环