我如何强迫Visual Studio使用我想要的依赖性库名称

How can I force Visual Studio to use dependency library names I want it to?

本文关键字:依赖性 我想要 何强迫 Visual Studio      更新时间:2023-10-16

我已经在Visual Studio(2013)中创建了一个静态C 库,称为" mylib.lib"。它是多线程(/mt),我在图书馆员/常规下指定"输出文件"为" $(OUTDIR)$(targetName)$(targetExt)",所以我可以在没有" MT" Visual Studio想要的情况下命名仅仅因为我使用了'/mt'而强制到文件名的末尾。

该项目还链接在其他几个依赖项中,因此它们都在一个巨大的" mylib.lib"文件中,用于使用应用程序。这些其他图书馆是" A.lib"," B.Lib"answers" C.Lib"。他们还构建了指定输出名称,以免在文件名的末尾具有" MT"。

现在,我想在C 应用程序中消耗" mylib.lib",该应用程序也使用'/mt'来构建。该应用程序与该库链接,并在其中调用一个功能。该应用程序无法链接,因为它"无法打开文件'amt.lib'lnk1104"。

该应用程序对" a.lib"没有直接依赖性,并且该依赖关系已包含在" mylib.lib"中,它不会尝试将其链接为" mylibmt.lib"。看似任意的决定在一种情况下应用" MT"后缀而不是另一种情况令人困惑。

在这里,Visual Studio内部发生了什么?我有没有办法告诉它不要将" MT"附加到某些库上?

实现此目的的一种方法是在消费应用程序中设置"无默认库",然后在链接器部分中手动添加所有"附加"依赖关系。这需要一路跟踪依赖树,但确实可以。

这样做的更简单的方法是将所需的库添加到链接器|输入下的"忽略特定默认库"字段中。例如,我在该字段中添加了" amt.lib"," bmt.lib"answers" cmt.lib" - 然后将" a.lib"," b.lib"answers" c.lib"添加到"其他依赖关系"字段(也在链接器下|输入)。