在另一个静态库中包含(链接)静态库的麻烦

时间:2009-09-14 00:13:45

标签: c++ visual-studio linker static-libraries

我会尽快解释我想做什么:

使用静态库的项目,其中另一个作为depandency。 它生成一个名为MyProject的项目,链接在MyLib2上的MyLib1链接上。 这是编译顺序:

  • MyLib2
  • MyLib1(链接到MyLib2)
  • MyProject(链接到MyLib1)

我正在使用Visual Studio 2008,我在定义include方面遇到了一些麻烦。 链接时,我使用属性“Additional Include Directory”(在项目属性C / C ++节点上)。 这似乎在MyProject和MyLib1之间有效,但不在MyLib1和MyLib2之间。 例如:我在MyLib2中有一个名为foo.cpp的文件;使用#include“foo.cpp”使visual studio告诉foo.cpp是未知的(缺少文件或文件夹)。

为了确保它不是我给出的错误路径,我做了很多尝试,如下所示:将命令行中显示的路径(用于编译库)复制粘贴到win explorer中:我看到了我的源代码第二图书馆。我已经多次重新制作这个项目,每次都使用不同的名字(强迫我注意这一点),一切似乎都很明确(但不是“包括”)。

我实际上找到的唯一方法是使用它:使用#include “c:\\ foo.cpp”作为包含...非常好的便携性!

以下是解决方案的Zip以自行测试并告诉我错误:MyProject.rar

感谢您抽出宝贵时间帮助我! Lucyberad

2 个答案:

答案 0 :(得分:1)

首先,永远不要包含* .cpp文件。

其次,使用外部函数的前向声明:

void appellib2(void);

void appellib1(void)
{
    appellib2();
}

第三步,在解决方案资源管理器中右键单击每个项目,然后选择“项目依赖项...”并设置正确的依赖项:MyProject - > MyLib1 - > MyLib2。

最后,在MyProject的属性中,设置其他依赖项MyLib1.lib。

现在我可以毫无错误地构建和运行您的项目。

<强>更新

永远不要将* .cpp重命名为* .h来解决链接问题。如果您的* .h文件中有定义,则无法将其包含两次或更多次。

这是您的项目YourProject.rar

答案 1 :(得分:0)

我已将.cpp改为.h。我知道我从来没有包含CPP文件,但它是用于测试目的。

我已经添加了每个函数的原型但是效果不好(它不包含文件mylib2.cpp,原型在这个测试中更好但没用)。

我已经设置了项目依赖项。它仍然失败。

我已将MyLib1.lib的其他依赖项设置为MyProject(我认为这是我能够找到的下一个错误,导致链接出错)。

通过这些修改,我仍然包含错误mylib2.h:没有这样的文件或目录。

以下是新档案:MyProject.rar

如果你达到了工作的目的,你可以让我存档工作解决方案吗?

谢谢, Lucyberad。