首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一解决方案上交联不同项目时Visual 2008中的C++链接问题

在同一解决方案上交联不同项目时Visual 2008中的C++链接问题
EN

Stack Overflow用户
提问于 2010-03-24 12:33:53
回答 3查看 720关注 0票数 4

我正在使用来设置一些单元测试。我有三个解决方案:

  • FN (我的项目)
  • FN_test (我的测试)
  • gtest (谷歌测试框架)

我将FN_test设置为FN和gtest作为引用(依赖项),然后我认为我已经准备好设置测试(我已经将每个人设置为/MTd (不这样做会导致我在之前链接错误)。

特别是,我在FN中定义了一个名为test的类,我希望使用FN_test进行测试。到现在为止还好。因此,我使用googletest编写一个名为EmbarkTest的类,声明一个成员登*并在构造函数中写入:

代码语言:javascript
复制
EmbarkTest() {
  e = new Embark(900,2010);
}

然后,按下F7,我得到以下内容:

1>FN_test.obj : error LNK2019: unresolved external symbol "public: __thiscall Embark::Embark(int,int)" (??0Embark@@QAE@HH@Z) referenced in function "protected: __thiscall EmbarkTest::EmbarkTest(void)" (??0EmbarkTest@@IAE@XZ) 1>D:\Users\lg\Product\code\FN\Debug\FN_test.exe : fatal error LNK1120: 1 unresolved externals

有人知道我做错了什么和/或我能做些什么来解决这个问题吗?

编辑:Embark.h中的相关代码

代码语言:javascript
复制
class Embark
{
public:

   //Constructor for initial state
   Embark(int _id, int _year);
   //Destructor
   ~Embark();   
/* ... */
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-25 12:55:15

我发现答案相当简单。经过两天的猛烈打击,是这样的:

您必须将您的主要项目编译为.lib 而不是 .exe

在这样做之后,所有的链接都变成了一种幸福。我认为Visual会自动为我做到这一点,因为我从FN_test中声明了对FN的依赖:我假设Visual会创建库。事实并非如此。

RANT (无需在此之后阅读)

由于很难将一个使可执行文件的项目链接到另一个执行相同的项目,因此在这类问题上找到引用有点困难。谷歌搜索没有给我带来任何有用的结果。MSDN论坛也无济于事。

但是,当您在应用程序上进行单元测试时,在同一解决方案上发生这种情况(例如,测试项目和应用程序项目)是否很常见?我对C++的其他测试框架一无所知。我选择了Google测试框架,用于:

  1. 在谷歌我们相信
  2. 伟大的文献
  3. 非常简单的使用和理解

但是,它对一体化并没有多大的好处。我认为其他工具将更好地集成到Visual,包括IDE响应。但我宁愿现在就受苦,而不是事后。我希望这个工具不断改进,因为我喜欢它。

票数 3
EN

Stack Overflow用户

发布于 2010-03-24 12:39:12

链接器找不到Embark构造函数的定义。

  • 你在某个地方定义了构造函数吗?
  • 您的测试项目是否实际链接到FN库?
票数 1
EN

Stack Overflow用户

发布于 2010-03-24 12:41:01

链接器找不到Embark::Embark(int, int)

以下是MSDN对错误LNK2019的看法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2507595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档