51Testing软件测试论坛
标题:
使用CPPUnit时,出现error LNK2001
[打印本页]
作者:
alina_zh
时间:
2007-3-31 02:00
标题:
使用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提供的类?该如何解决呢?
作者:
VisualUnit
时间:
2007-3-31 11:21
找一下类CppUnit::SourceLine的实现在哪个源文件,然后把它加入测试工程。加入方法:VC->Project->Add To Project。
这类链接错误通常是源文件未加入工程引起的,即编译器找不到函数的实现。
作者:
alina_zh
时间:
2007-4-2 00:03
确实如此,感谢VisualUnit的帮助。
为了以后的扩展使用,我吧CPPUNIT的所有源文件都加入了工程,然后就OK了。
但,我还是有疑问:
1、只能用这个方法解决吗?这样每次我建新的测试工程岂不是都要加一遍?(CPPUNIT有几十个源文件啊~~~),而且我看它给的example中也没有加源文件,只包含了个Makefile.am文件。是不是还有别的解决方法呢??
2、安装完CPPUNIT后,我已经在tools->options ,directories 标签的 source files中加入了CPPUNIT源文件的路径,这样设置后工程不能自己找到源文件吗??(我原以为是可以的呢~~),如果是这样,设置它有什么用呢还??
作者:
VisualUnit
时间:
2007-4-2 09:41
1、自带的Makefile.am可能本身包含了源文件路径信息吧,我没看过,不知道。VC的缺省编译方式就是从*.dsp中查找源文件并编译的,手工加入也不麻烦啊。手工编辑MakeFile文件更麻烦,并且还容易错。至于CPPUNIT本身,只是一个框架而已,并不是自动化的。
2、设置的只是搜索路径,VC只知道可以从这些地方去找文件,而不知道哪些文件是当前工程所要编译的(如果把目录下的所有源文件都当成当前工程的源文件,很可能不对的)
[
本帖最后由 VisualUnit 于 2007-4-2 09:44 编辑
]
作者:
lantianwei
时间:
2007-4-10 14:27
我昨天也出现了这样相似的问题,搞了半天都没搞好,等会再试试看,呵呵...
作者:
mythyaya
时间:
2007-7-26 16:20
这个问题怎么解决啊,总不能每次 都要加入所有的源文件吧??
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2