google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

[求助] 使用CPPUnit时,出现error LNK2001

使用CPPUnit时,出现error LNK2001


VC6.0下,按照CPPUnit提供的examples测试一个小的程序,build时有如下提示:
CompareTest.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CppUnit::SourceLine::~SourceLine(void)" ([email=??1SourceLine@CppUnit@@UAE@XZ]??1SourceLine@CppUnit@@UAE@XZ[/email])
CompareTest.obj : error LNK2001: unresolved external symbol "public: static void __cdecl CppUnit::Asserter::failIf(bool,class CppUnit::Message const &,class CppUnit::SourceLine const &)" ([email=?failIf@Asserter@CppUnit@@SAX_NABVMessage@2@ABVSourceLine@2@@Z]?failIf@Asserter@CppUnit@@SAX_NABVMessage@2@ABVSourceLine@2@@Z[/email])
CompareTest.obj : error LNK2001: unresolved external symbol "public: __thiscall CppUnit::Message::Message(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_t
raits<char>,class std::allocator<char> > const &)" ([email=??0Message@CppUnit@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z]??0Message@CppUnit@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z[/email])
……
……
(共35条,余略)

仔细和examples中最简单的simple比对后,发现在simple工程下还有一个Makefile.am文件。尝试把simple中的.CPP、.h单独取出重新build时也出现了N多条error LNK2001的提示。
请问:
1、Makefile.am有什么用?我的粗浅理解是:makefile是用来告诉编译器如何进行编译的,在UNIX中用make编译时会用到该文件。在VC下也需要吗?
2、出现以上的问题是不是就是因为VC无法链接到CPPUnit提供的类?该如何解决呢?

TOP

找一下类CppUnit::SourceLine的实现在哪个源文件,然后把它加入测试工程。加入方法:VC->Project->Add To Project。

这类链接错误通常是源文件未加入工程引起的,即编译器找不到函数的实现。
C/C++单元测试工具Visual Unit
http://www.KaileSoft.cn

TOP

确实如此,感谢VisualUnit的帮助。
为了以后的扩展使用,我吧CPPUNIT的所有源文件都加入了工程,然后就OK了。


但,我还是有疑问:

1、只能用这个方法解决吗?这样每次我建新的测试工程岂不是都要加一遍?(CPPUNIT有几十个源文件啊~~~),而且我看它给的example中也没有加源文件,只包含了个Makefile.am文件。是不是还有别的解决方法呢??

2、安装完CPPUNIT后,我已经在tools->options ,directories 标签的 source files中加入了CPPUNIT源文件的路径,这样设置后工程不能自己找到源文件吗??(我原以为是可以的呢~~),如果是这样,设置它有什么用呢还??

TOP

1、自带的Makefile.am可能本身包含了源文件路径信息吧,我没看过,不知道。VC的缺省编译方式就是从*.dsp中查找源文件并编译的,手工加入也不麻烦啊。手工编辑MakeFile文件更麻烦,并且还容易错。至于CPPUNIT本身,只是一个框架而已,并不是自动化的。

2、设置的只是搜索路径,VC只知道可以从这些地方去找文件,而不知道哪些文件是当前工程所要编译的(如果把目录下的所有源文件都当成当前工程的源文件,很可能不对的)

[ 本帖最后由 VisualUnit 于 2007-4-2 09:44 编辑 ]
C/C++单元测试工具Visual Unit
http://www.KaileSoft.cn

TOP

我昨天也出现了这样相似的问题,搞了半天都没搞好,等会再试试看,呵呵...
性格决定命运,气度决定格局!
个人网站-http://www.lantianwei.com
欢迎大家访问!

TOP

这个问题怎么解决啊,总不能每次 都要加入所有的源文件吧??

TOP

 
当前时区 GMT+8, 现在时间是 2008-12-2 18:04Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹