我在Visual Studio(2013)中创建了一个名为“mylib.lib”的静态c ++库。它是多线程(/ MT)并且我在Librarian / General下指定“输出文件”为“$(OutDir)$(TargetName)$(TargetExt)”所以我可以在没有“mt”的情况下将其命名为Visual Studio强迫到文件名的末尾只是因为我使用'/ MT'。
这个项目还链接了其他几个依赖项,因此它们都在一个巨大的“mylib.lib”文件中,供应用程序使用。这些其他库是“A.lib”,“B.lib”和“C.lib”。它们也是构建的,用于指定输出名称,以便在文件名的末尾不含“mt”。
现在我想在C ++应用程序中使用“mylib.lib”,该应用程序也使用'/ MT'来构建。应用程序与该库链接并调用其中的单个函数。应用程序无法链接,因为它“无法打开文件'Amt.lib'LNK1104”。
应用程序没有直接依赖于“A.lib”,并且该依赖关系已经包含在“mylib.lib”中,它不会尝试链接为“mylibmt.lib”。在一个案例而不是另一个案件中应用“mt”后缀的看似武断的决定令人困惑。
Visual Studio的内心在这里发生了什么?有没有办法告诉它不要将“mt”附加到某些库上?
答案 0 :(得分:0)
实现此目的的一种方法是在使用应用程序中设置“无默认库”,然后在“链接器”部分中手动添加每个“附加”依赖项。这需要在依赖关系树中一直跟踪,但它确实有效。
更简单的方法是将所需的库添加到“链接器”|“输入”下的“忽略特定的默认库”字段中。例如,我将“Amt.lib”,“Bmt.lib”和“Cmt.lib”添加到该字段中 - 然后将“A.lib”,“B.lib”和“C.lib”添加到“附加依赖项”字段(也在“链接器”|“输入”下)。