有多个项目构建DLL的正确方法?

时间:2009-10-13 16:36:25

标签: c++ dll

好的,所以我试图将一些项目转换为DLL。这些都是visual studio 2008项目,都是用C ++编写的。

我们有9个不同的项目(在Visual Studio 2008中都是1个解决方案)。 E.g:

RasterTools\
 RasterDataset.h
 RasterDataset.cpp
 Point.h
 Point.cpp
 <... insert like 50 more cpp files ...>

CoreTools\
 Image.h
 Image.cpp
 CoreUtilities.h
 CoreUtilities.cpp
 <... insert more ...>

<... insert 7 or more projects ...>

现在问题是某些项目使用其他项目的类。例如,Image.h使用Point.h,CoreUtilities.h有一些处理Points的函数。当你有多个交织在一起的项目时,构建DLL的正确方法是什么。

基本上我们希望拥有以下内容:

CoreTools.dll
RasterTools.dll
<other projects.dll>

我理解如何通过宏处理__declspec(dllexport)和dllimport。但是当我尝试构建CoreTools.dll时,我得到了链接器错误,而我使用的是该项目中未包含的类或功能。例如,在构建coreTools.dll时,我会收到任何Point Class函数的链接器错误。

我该如何处理?

修改

我试过这个,基本上我注意到几乎所有的复选框都是灰色的,因为它的结果是循环依赖。 :(

3 个答案:

答案 0 :(得分:3)

如果右键单击抛出链接器错误的项目并选择“项目依赖项...”,您将看到解决方案中所有其他项目的列表。

选中您需要链接的(DLL)项目旁边的框,Visual Studio将自动链接到它(并确保在客户端之前构建依赖项)。

答案 1 :(得分:2)

对于您构建的每个DLL,您还应该构建一个LIB。如果项目B(B.DLL)引用项目A(A.DLL)中的条目,则首先构建项目A,创建A.DLL和A.LIB,然后项目B可以将A.LIB添加到可选链接库以解析它的参考。那么依赖于B.DLL的C.DLL可以包含在链接步骤B.LIB等等中。

至少这是在非常低的构建/制作级别发生的事情。如果您选择正确的项目依赖关系,那么开发人员可以为您完成所有这些工作,正如leegent建议的那样。

答案 2 :(得分:1)

如果您的DLL之间存在循环依赖关系,则必须通过移动内容来解决它们,以便获得分层DLL,每个DLL在给定级别仅使用以下级别的代码。