0

我正在处理一个包含多个项目的解决方案文件(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”到链接器下输入选项卡下的“附加依赖项”(在项目属性中)。

所以你去。有任何想法吗?


4

1 回答 1

0

此外,日志项目在项目设置的链接器部分的“附加库目录”参数中有 $(OutDir)。

大概是错的。它应该是“core.lib”所在的那个目录,$(OutDir)就是log将要放置的地方。

该类是包含在 AB.h 中的 h 文件的一部分(在 AB.cpp 中声明并作为 extern 包含在 CD.cpp 中的实例。infFlag 在 AB.cpp 中声明并在 CD.cpp 中声明为 extern。

那么定义在哪里呢?

于 2010-08-15T08:42:34.693 回答