我正在处理一个包含多个项目的解决方案文件(VS 2005)。
我现在关心两个项目——一个叫做 core,另一个叫做 log。
核心项目是启动项目,日志项目在其项目依赖项中勾选了核心。
我在核心项目中有两个文件 - AB.h(declarations) 和 AB.cpp(definitions)
核心项目中的许多其他 cpp 文件引用 AB.h,并且在 AB.cpp 中查找定义没有问题。
现在问题来了。我在日志项目中有一个名为 CD.cpp 的 cpp 文件,需要引用 AB.h。我已将 AB.h 的包含目录添加到核心项目和日志项目中(AB.cpp 也位于同一文件夹中)
此外,日志项目在项目设置的链接器部分的“附加库目录”参数中有 $(OutDir)。还在 Properties->Linker->Input 的 Additional Dependencies 字段中添加了“core.lib”
核心项目编译成一个 dll,但在同一个文件夹中还有一个 core.lib 以及其他垃圾。解决方案编译为发布版本。
在 CD.cpp 中,当我右键单击 #include "AB.h" 行时,它会将我带到核心文件夹中的 .h 文件。到目前为止一切都很好。但是,当我尝试编译解决方案时,日志项目无法正确构建,显示这两个链接器错误。
log.obj : 错误 LNK2001: 无法解析的外部符号 "class myNamespace::myClass myInstance" (?myInstance@@3VmyClass@myNamespace@@A)
log.obj:错误 LNK2001:未解析的外部符号“bool infFlag”(?infFlag@@3_NA)
该类是包含在 AB.h 中的 h 文件的一部分(在 AB.cpp 中声明并作为 extern 包含在 CD.cpp 中的实例。infFlag 在 AB.cpp 中声明并在 CD.cpp 中声明为 extern。
我该怎么做才能让日志正确构建?谢谢
好的。你们需要更多细节。当然。
一个解决方案文件。多个项目。
[核]
包括 AB.h 和 AB.cpp
-AB.h
--includes EF.h 来自外部库(此库中的函数对于同一核心项目中的文件正常工作)。
--声明一些函数
-AB.cpp
--定义那些在 AB.h 中声明的函数
- 一些其他 cpp 文件可以毫无问题地使用 AB.h 中的这些功能
[/核]
[日志->项目依赖项->核心]
-没有h文件
-CD.cpp
--需要 AB.h 才能工作。包含在#include 命令中并正确链接(我可以右键单击并单击“打开文件”以打开真正的 .h 文件)
--使用 AB.h 中的函数
[/日志]
希望这能更好地让你们了解我的解决方案中的项目结构。
编译 Log 项目时出现问题。对于 AB.h 中的任何函数引用,它总是会出现链接错误,即“未解析的外部符号”。我猜这是因为它找不到 AB.h 中声明的函数的定义(可能是因为它是一个不同的项目)。由于日志依赖于核心,并且核心将在那时编译,我将 $(OutputDir) 添加到库目录(核心和日志都构建到同一目录中),以便它可以找到 core.lib 并添加了“核心.lib”到链接器下输入选项卡下的“附加依赖项”(在项目属性中)。
所以你去。有任何想法吗?