Сборка / Использование библиотеки CppUnit на VS2010 - PullRequest
3 голосов
/ 11 января 2011

Я скачал и скомпилировал 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

Ответы [ 3 ]

2 голосов
/ 11 января 2011

похоже, что вы скомпилировали CppUnit в режиме отладки, а теперь вы собираете текущие файлы в режиме выпуска.Они не должны смешиваться, и это то, что говорит вам компилятор.

Самый быстрый способ решить эту проблему, вероятно, состоит в том, чтобы использовать проект VS и сравнить его настройки с проектом, используемым для компиляции CppUnit.*

при редактировании : вы также смешиваете библиотеки времени выполнения (например, убедитесь, что обе библиотеки скомпилированы с использованием ключа / MD, также известного как многопоточная DLL)

1 голос
/ 06 июля 2011

Я обновил свои проекты CPPUNIT до visual studio 2010, и мне пришлось это исправить вручную.Проблема в сборке заключалась в заключительных действиях, где копируются выходные файлы.

Для проекта cppunit_dll одна из пользовательских команд:

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

$ (TargetName) is "cppunit_dll».

Это противоречит тому, что мы на самом деле строим: если вы посмотрите на параметры компоновщика, вы увидите, что имя выходного файла - "cppunitd_dll.dll".

Я использовал решениеперейдите в ConfigurationPropertys \ General и измените «Имя цели» с $ (ProjectName) на «cppunitd_dll».

Мне пришлось использовать аналогичное решение для проекта cppunit.

0 голосов
/ 05 июня 2011

прочитайте INSTALL-VS.Net2008.txt в папке cppunit после проверки исходного кода из SVN.

в основном: под папкой примеров есть визуальное студийное решение.

это, как говорится ... я все еще не могу заставить его строить без ошибок на vs2010 после преобразования. я получаю "cmd.exe" не удалось и не удается скопировать DLL.

...