在VS2010上构建/使用CppUnit库

时间:2011-01-11 14:40:10

标签: visual-studio visual-studio-2010 cppunit

我下载并编译了CppUnit以使用Visual Studio 2010进行编译。

转换后,我可以加载CppUnitLibraries,它给了我cppunit.lib和cppunit_dll.lib / dll。将头文件和库复制到目录后,我运行此命令以获得大量错误。

我发现库的冲突如下

LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library

但是,以下命令似乎不起作用。

cl main.cpp complex.cpp testset.cpp /I"C:\CppUnit\include" /link /libpath:"C:\CppUnit\lib" cppunit.lib /NODEFAULTLIB:library

他们有什么问题?

这是我用于编译/链接的命令。

cl main.cpp complex.cpp testset.cpp /I"C:\CppUnit\include" /link /libpath:"C:\CppUnit\lib" cppunit.lib

这是来自VS2010的错误消息。

cppunit.lib(TestResult.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': 

...

node@@@Z) already defined in LIBCMT.lib(typinfo.obj)
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:lib
rary
main.exe : fatal error LNK1169: one or more multiply defined symbols found

ADDED

CppUnit提供旧版本的项目文件(dsw),因此我需要手动将文件转换为2010解决方案项目。

对于错误,编译的缺失/ MD是问题的根源。对于其他编译警告,我需要添加/ EHsc参数。

cl /EHsc /MD /c /I"./CppUnit/include" main.cpp testset.cpp complex.cpp
link /libpath:"CppUnit/lib" main.obj testset.obj complex.obj cppunit.lib /out:cpptest_static.exe
link /libpath:"CppUnit/lib" main.obj testset.obj complex.obj cppunit_dll.lib /out:cpptest_dynamic.exe

3 个答案:

答案 0 :(得分:2)

好像你在调试模式下编译了CppUnit,我们现在正在以发布模式编译你当前的文件。那些不应该是混合的,这就是编译器告诉你的。

解决这个问题的最快方法可能是使用VS项目,并根据用于编译CppUnit的项目检查它的设置。

您编辑上的

:您还混合了运行时库(例如,检查两者是使用/ MD开关又称多线程DLL编译的)

答案 1 :(得分:1)

我将CPPUNIT项目升级到visual studio 2010并且必须手动修复它。 构建中的问题在于复制输出文件的最终操作。

对于cppunit_dll项目,其中一个自定义命令是:

copy "$(TargetPath)" ..\..\lib\$(TargetName).dll
copy "$(TargetDir)$(TargetName).lib" ..\..\lib\$(TargetName).lib

$(TargetName)是“cppunit_dll”。

这与我们实际构建的内容冲突:如果查看链接器选项,您会看到输出文件名是“cppunitd_dll.dll”。

我使用的解决方案是转到ConfigurationPropertys \ General,并将“Target Name”从$(ProjectName)更改为“cppunitd_dll”。

我不得不为cppunit项目提供类似的解决方案。

答案 2 :(得分:0)

从SVN签出源代码后,在cppunit文件夹中读取INSTALL-VS.Net2008.txt。

基本上是: 在examples文件夹下有一个visual studio解决方案。

正如所说的那样......转换后,我仍然无法在vs2010上无错误地构建它。我得到'cmd.exe'失败,无法复制dll。