我将尽力解释一下我想做什么:
一个使用静态库的项目,该库具有另一个库。
它在MyLib2上生成一个名为MyProject的项目,该项目在MyLib1上链接。
这是编译顺序:
MyLib2
MyLib1(链接到MyLib2)
MyProject(链接到MyLib1)
我正在使用Visual Studio 2008,在定义包含时遇到了一些麻烦。
链接时,我使用属性“其他包含目录”(在项目属性C / C ++节点上)。
这似乎在MyProject和MyLib1之间有效,但在MyLib1和MyLib2之间无效。
例如:我在MyLib2中有一个名为foo.cpp的文件。使用#include“ foo.cpp”使Visual Studio知道foo.cpp是未知的(缺少文件或文件夹)。
为了确保它不是我给的错误路径,我做了很多尝试,例如:将命令行中显示的路径(用于编译库)复制粘贴到win资源管理器中:我很好地看到了第二个库的源代码。我已经多次重造该项目,并且每次使用不同的名称(迫使我注意这一点)时,所有内容似乎都定义良好(但不是“包括”)。
我真正找到使之起作用的唯一方法:使用#include“ c:\\ foo.cpp”作为include ...对于可移植性非常好!
这是解决方案的邮编,您可以自己进行测试并告诉我出了什么问题:MyProject.rar
感谢您抽出时间来帮助我!
露西贝拉德
最佳答案
首先,切勿包含* .cpp文件。
其次,使用外部函数的前向声明:
void appellib2(void);
void appellib1(void)
{
appellib2();
}
第三,在解决方案资源管理器中右键单击每个项目,然后选择“项目依赖项...”并设置适当的依赖项:MyProject-> MyLib1-> MyLib2。
最后,在MyProject的属性中,设置其他依赖项MyLib1.lib。
现在,我可以正确构建并运行您的项目了。
更新
切勿仅将* .cpp重命名为* .h来解决链接问题。如果您的* .h文件中有定义,则将无法包含两次或多次。
这是您的项目YourProject.rar。