我下载并编译了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):错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配: ... node@@@Z) 已在 LIBCMT.lib(typinfo.obj) 中定义 链接:警告 LNK4098:defaultlib 'MSVCRTD' 与使用其他库冲突;使用 /NODEFAULTLIB:lib 稀有 main.exe:致命错误 LNK1169:找到一个或多个多重定义符号
添加
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