Ошибка Unicode набора символов DCMTK

Я использую библиотеку DCMTK под Visual Studio 2013.
В свойствах проекта, если я установил

Character Set: Use Unicode Character Set

При компиляции у меня ошибка

Error   1   error C2678: binary '+' : no operator found which takes a left-hand operand of type 'const wchar_t [8]' (or there is no acceptable conversion)   C:\DCMTK\include\dcmtk\oflog\tracelog.h
Error   2   error C2664: 'void dcmtk::log4cplus::Logger::forcedLog(const dcmtk::log4cplus::spi::InternalLoggingEvent &) const' : cannot convert argument 3 from 'int' to 'const char *'   C:\DCMTK\include\dcmtk\oflog\tracelog.h
Error   3   error C2678: binary '+' : no operator found which takes a left-hand operand of type 'const wchar_t [8]' (or there is no acceptable conversion)   C:\DCMTK\include\dcmtk\oflog\tracelog.h
Error   4   error C2664: 'void dcmtk::log4cplus::Logger::forcedLog(const dcmtk::log4cplus::spi::InternalLoggingEvent &) const' : cannot convert argument 3 from 'int' to 'const char *'   C:\DCMTK\include\dcmtk\oflog\tracelog.h
Error   5   error C2665: 'dcmtk::log4cplus::Logger::getInstance' : none of the 2 overloads could convert all the argument types   C:\DCMTK\include\dcmtk\oflog\logmacro.h
IntelliSense: no instance of overloaded function "dcmtk::log4cplus::Logger::getInstance" matches the argument list
argument types are: (const dcmtk::log4cplus::tchar *)   c:\DCMTK\include\dcmtk\oflog\logmacro.h
IntelliSense: no operator "+" matches these operands
operand types are: const wchar_t [8] + dcmtk::log4cplus::tstring   c:\DCMTK\include\dcmtk\oflog\tracelog.h
IntelliSense: no operator "+" matches these operands
operand types are: const wchar_t [8] + dcmtk::log4cplus::tstring   c:\DCMTK\include\dcmtk\oflog\tracelog.h
IntelliSense: identifier "cerr" is undefined   c:\Users\Kyle\Google Drive\cpp_codes\dicom\DicomTest\test1\Source.cpp
IntelliSense: identifier "endl" is undefined   c:\Users\Kyle\Google Drive\cpp_codes\dicom\DicomTest\test1\Source.cpp

что я могу решить, если я установлю Character Set: Use Multi-Byte Character Set

Но мне нужно использовать DCMTK в другом проекте, где набор символов должен быть Unicode. Глядя на ошибку, проблема только в каком-то классе о регистрации, которую я, вероятно, никогда не буду использовать: поэтому я пытаюсь прокомментировать строку кода, которая получает ошибку, и теперь я могу скомпилировать с Unicode.

Это единственный способ решить проблему? Какую проблему я могу комментировать эту часть?

3

Решение

Согласно файлу INSTALL в DCMTK:

«DCMTK не компилируется, когда определен UNICODE или _UNICODE, потому что
Компилятор VisualStudio затем использует версию Unicode вместо ANSI
версия для всех функций Windows API (т. е. введите wchar_t вместо char
для всех параметров строки символов и возвращаемых значений). «

Может быть, вы должны использовать DCMTK с динамической связью (как DLL). Однако для этого требуется использовать текущий моментальный снимок разработки, а не последний выпуск (который является 3.6.0).

2

Другие решения

Я сталкиваюсь точно с той же проблемой. Этой теме несколько дней, но, возможно, кто-то может использовать эту информацию. Я нашел некоторые темы с похожей проблемой, но без удовлетворительного решения.

У нас была проблема, что мы хотим изменить IDE с VS2008 на VS2015. Все наши (суб) проекты нашего программного решения были построены с флагом UNICODE. И мы уже успешно интегрировали DCMTK 3.6.1 в проекты UNICODE.

Я скачал последнюю DCMTK 3.6.1 построить (3.6.1_20161102) и скомпилировал его с VS2015. Затем я попытался связать и скомпилировать статические библиотеки с нашим программным решением, но это не удалось (с такими же ошибками, как описано выше).

После нескольких часов безуспешных попыток со статической библиотекой, различными настройками CMake и предложением общей библиотеки (также с одной полной общей библиотекой DCMTK) я попробовал другой способ. Потому что с VS2008 IDE и UNICODE он уже работал.

Наконец я был успешным, так как я использовал более старый DCMTK 3.6.1 построить (3.6.1_20120222).

DCMTK 3.6.1 (20120222)

Эта сборка не содержит следующий файл:

dcmtk \ oflog \ tracelog.h

Этот файл вызывает (в моем случае) ошибки компилятора и компоновщика, когда для целевого проекта был установлен флаг UNICODE.

Кроме того, когда флаг DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS активирован, то я получил ошибки, как показано ниже:

1> dcmnet.lib (assoc.obj): ошибка LNK2038: обнаружено несоответствие для «RuntimeLibrary»: значение «MTd_StaticDebug» не соответствует значению «MDd_DynamicDebug» в DCMBase.obj

Без флага я смог без проблем использовать скомпилированные статические библиотеки.

Надеюсь, это поможет кому-то и сэкономит много часов.

С уважением

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector