我会尽快解释我想做什么:
使用静态库的项目,其中另一个作为depandency。 它生成一个名为MyProject的项目,链接在MyLib2上的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
答案 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。