C++ 针对两个静态库的链接
我正在从事一个非常大的项目,该项目有几个VisualStudio项目。这些项目作为静态库构建,并包含在主项目中,我们称之为C++ 针对两个静态库的链接,c++,visual-studio-2010,static-libraries,C++,Visual Studio 2010,Static Libraries,我正在从事一个非常大的项目,该项目有几个VisualStudio项目。这些项目作为静态库构建,并包含在主项目中,我们称之为Main.exe 我创建了一个新项目,并将其构建为一个静态库,我们称之为MyProj.lib。这个库依赖于另一个静态库,我们称它为API.lib 现在,我需要将我的项目链接到主项目。目前我有两个链接到主项目的静态库。我以前问过这个问题:并且发现我不能嵌套静态库。paulmichalik指出,在构建主项目时,我需要简单地将两个库独立地链接起来 我现在从MyProj.lib库中得
Main.exe
我创建了一个新项目,并将其构建为一个静态库,我们称之为MyProj.lib
。这个库依赖于另一个静态库,我们称它为API.lib
现在,我需要将我的项目链接到主项目。目前我有两个链接到主项目的静态库。我以前问过这个问题:并且发现我不能嵌套静态库。paulmichalik指出,在构建主项目时,我需要简单地将两个库独立地链接起来
我现在从
MyProj.lib
库中得到了几个LNK2019
错误,说它找不到API.lib
库中定义的符号。VisualStudio知道这两个库文件的位置,所以这让我很困惑。有什么想法吗?最简单的解决方案是将.lib
文件添加到依赖它们的每个项目中。如果这很重要(可能不适用于VS),请将依赖库放在依赖库之前
这样做的(可能)缺点是库在更改时不会自动重新编译。最简单的解决方案是将
.lib
文件添加到依赖它们的每个项目中。如果这很重要(可能不适用于VS),请将依赖库放在依赖库之前
这样做的(可能)缺点是,库在更改时不会自动重新编译。这种混淆源于错误地认为.lib文件具有某种魔力。链接器可以看到.lib文件具有其他依赖项。事实并非如此,static.lib只是一包.obj文件。将编译器输出收集到单个文件中的一种方法。不多不少 尤其令人困惑的是,当您构建库时,它永远不会抱怨缺少依赖项。对此的解释很简单,构建库并不运行链接器。只需将.obj文件收集到包中的lib.exe工具 在您实际运行链接器以构建最终可执行文件之前,它不会结合在一起。现在所有的部分都必须放在一起,链接器还必须看到包含依赖项的.obj或.lib文件。当它不抱怨时,它会抱怨
这是C/C++构建模型中的一个非常薄弱的环节,很难修复。供应商试图解决这个问题,微软也这样做了。他们添加了非标准的#pragma注释(lib,“something.lib”)功能,告诉链接器需要链接“something.iib”,而无需在链接器的附加依赖项设置中明确指定它。很不错的。然而,准确地处理“something.lib”的存储位置是您需要处理的问题。积垢。另一种设置。这种混淆源于错误地认为.lib文件有魔力。链接器可以看到.lib文件具有其他依赖项。事实并非如此,static.lib只是一包.obj文件。将编译器输出收集到单个文件中的一种方法。不多不少 尤其令人困惑的是,当您构建库时,它永远不会抱怨缺少依赖项。对此的解释很简单,构建库并不运行链接器。只需将.obj文件收集到包中的lib.exe工具 在您实际运行链接器以构建最终可执行文件之前,它不会结合在一起。现在所有的部分都必须放在一起,链接器还必须看到包含依赖项的.obj或.lib文件。当它不抱怨时,它会抱怨
这是C/C++构建模型中的一个非常薄弱的环节,很难修复。供应商试图解决这个问题,微软也这样做了。他们添加了非标准的#pragma注释(lib,“something.lib”)功能,告诉链接器需要链接“something.iib”,而无需在链接器的附加依赖项设置中明确指定它。很不错的。然而,准确地处理“something.lib”的存储位置是您需要处理的问题。积垢。另一个设置。您是说将
API.lib
链接到MyProj.lib
并在主项目中同时链接这两者吗?我已经试过了,它给了我3600多个链接器警告。@Derek:如果MyProj.lib包含API.lib,就会出现这种情况。但是MyProj应该只包含对API和其他任何东西的外部引用,而不是引用的模块和符号。现在,MyProj.lib
正在作为一个库构建,而没有链接到API.lib
。您是说在主项目中将API.lib
链接到MyProj.lib
并将两者链接起来吗?我已经试过了,它给了我3600多个链接器警告。@Derek:如果MyProj.lib包含API.lib,就会出现这种情况。但是MyProj应该只包含对API和其他任何东西的外部引用,而不是引用的模块和符号。现在,MyProj.lib
正在作为一个库构建,而没有链接到API.lib
。