链接到具有相同function签名的两个lib文件?

如果我正在使用具有以下签名的函数:

void foo(int i);

而且这个函数存在于libxxx.lib中,也存在于libyyy.lib中(但是函数的实现在每个lib文件中是不同的),所以如果我将这个对象文件与这两个lib文件链接起来会发生什么? 我会得到一个错误,该函数存在于两个lib文件中,或者链接器是否会select一个随机函数或其他东西?

通常,链接器只能从静态库中获取未解析的符号。 因此,如果函数void foo(int i)从给定给链接器的目标文件之一被调用,它将使用命令行给出的第一个库中存在的版本。 因为一旦在第一个图书馆里找到了这个符号,在看第二个图书馆时就不会再解决了。

如果在两个目标文件中定义相同的符号,则会有所不同,因为这会导致链接器错误。

如果从另一个静态库调用void foo(int i)函数,问题很难解决,因为现在取决于3个库的相对顺序。 我的建议是,如果可以的话,你应该避免这种情况。