【问题标题】:Linking Issues in a Multiproject Visual Studio 2005 solution多项目 Visual Studio 2005 解决方案中的链接问题
【发布时间】:2011-03-30 00:58:25
【问题描述】:

我正在处理一个包含多个项目的解决方案文件 (VS 2005)。

我现在关心两个项目——一个叫做 core,另一个叫做 log。

核心项目是启动项目,日志项目在其项目依赖项中有core勾选。

我在核心项目中有两个文件 - 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 以及其他垃圾。解决方案编译为 Release 版本。

在 CD.cpp 中,当我右键单击 #include "AB.h" 行时,它会将我带到核心文件夹中的 .h 文件。到目前为止一切都很好。但是,当我尝试编译解决方案时,日志项目无法正确构建,显示这两个链接器错误。

log.obj : error LNK2001: unresolved external symbol "class myNamespace::myClass myInstance" (?myInstance@@3VmyClass@myNamespace@@A)

log.obj : error LNK2001: unresolved external symbol "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

--包括来自外部库的 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”到链接器下输入选项卡下的“附加依赖项”(在项目属性中)。

所以你去。有什么想法吗?


【问题讨论】:

  • 我认为您应该将您的代码剥离到导致错误的最小形式并展示给我们。
  • 您是否尝试过专门列出目录(不是 $(OutputDir)),包括链接器部分中的发布/调试?我猜这个问题没有得到妥善解决。

标签: c++ visual-studio visual-c++ visual-studio-2005 multiple-projects


【解决方案1】:

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

可能是错误的。应该是 "core.lib" 所在的目录,$(OutDir)log 的放置位置。

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

那么定义在哪里?

【讨论】:

  • 请回到原来的问题。我在原始问题下添加了更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多