【问题标题】:Why would the order of linking libs cause runtime errors?为什么链接库的顺序会导致运行时错误?
【发布时间】:2013-03-01 06:45:19
【问题描述】:

我有一个非托管 C++ 项目,当链接器库(属性->链接器->输入->附加依赖项)按特定顺序列出时会产生运行时错误,但当我更改库的顺序时运行良好。我理解为什么订单会导致链接错误(Why does the order in which libraries are linked sometimes cause errors in GCC?),但它怎么可能导致运行时错误?我在 VS2005、2008 和 2010 中观察到了这一点。

【问题讨论】:

  • 你是混合编译器版本还是调试和发布?
  • 不,所有库都是由同一个编译器以相同的风格构建的。

标签: c++ visual-studio-2010 linker


【解决方案1】:

什么样的运行时错误?你不说,我们只能猜测。

这是可能发生运行时错误的一种方式:如果两个不相关的库公开了碰巧具有相同名称的不同函数,则链接器将选择它找到的第一个实现。

如果您打算从paint.lib 调用draw(),但gunfight.lib 在链接器列表中较早,那么您将调用错误的draw(),后果无法预料。

【讨论】:

  • 谢谢,我不知道,我以为链接器会在这种情况下抱怨。我没有指定运行时错误,因为我不知道如何在没有给出大量上下文的情况下在这里呈现它们。我会调查你的建议是否是原因。
  • 是的,准系统错误可能无济于事;它必须被蒸馏成“调用错误的函数”之类的东西。这是一个想法:通常链接器具有“详细”参数,这些参数会以痛苦的细节喷出它们正在做什么。找出该参数对于您的特定工具集是什么,并将其与两个链接顺序一起使用。通过 diff 工具运行输出,看看是否有什么突出的。请让我们知道结果如何。祝你好运。
猜你喜欢
  • 2021-11-06
相关资源
最近更新 更多