好的,所以我试图将一些项目转换为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函数的链接器错误。
我该如何处理?
修改的
我试过这个,基本上我注意到几乎所有的复选框都是灰色的,因为它的结果是循环依赖。 :(
答案 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在给定级别仅使用以下级别的代码。