Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 针对两个静态库的链接_C++_Visual Studio 2010_Static Libraries - Fatal编程技术网

C++ 针对两个静态库的链接

C++ 针对两个静态库的链接,c++,visual-studio-2010,static-libraries,C++,Visual Studio 2010,Static Libraries,我正在从事一个非常大的项目,该项目有几个VisualStudio项目。这些项目作为静态库构建,并包含在主项目中,我们称之为Main.exe 我创建了一个新项目,并将其构建为一个静态库,我们称之为MyProj.lib。这个库依赖于另一个静态库,我们称它为API.lib 现在,我需要将我的项目链接到主项目。目前我有两个链接到主项目的静态库。我以前问过这个问题:并且发现我不能嵌套静态库。paulmichalik指出,在构建主项目时,我需要简单地将两个库独立地链接起来 我现在从MyProj.lib库中得

我正在从事一个非常大的项目,该项目有几个VisualStudio项目。这些项目作为静态库构建,并包含在主项目中,我们称之为
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