【问题标题】:Building/Using CppUnit Library on VS2010在 VS2010 上构建/使用 CppUnit 库
【发布时间】:2011-01-11 14:40:10
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    似乎您在调试模式下编译了 CppUnit,但您现在正在以发布模式编译当前文件。这些不应该混合在一起,这就是编译器告诉你的。

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

    在您的编辑中:您还在混合运行时库(例如,检查两者是否使用 /MD 开关(即多线程 DLL)进行编译)

    【讨论】:

      【解决方案2】:

      我将我的 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,并将“目标名称”从 $(ProjectName) 更改为“cppunitd_dll”。

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

      【讨论】:

        【解决方案3】:

        从 SVN 中查看源代码后,读取 cppunit 文件夹中的 INSTALL-VS.Net2008.txt。

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

        话虽这么说...在转换它之后,我仍然无法在 vs2010 上构建它而不会出现错误。我得到 'cmd.exe' 失败并且无法复制 dll。

        【讨论】:

        • 我已经为你回答了这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 2011-03-03
        • 2016-04-15
        相关资源
        最近更新 更多