我下载并编译了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
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
答案 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。