/ MT версия бинарных сбоев в Visual Studio 2008 - как отлаживать - PullRequest
0 голосов
/ 31 января 2012

Я собираю версии / mt (библиотека времени выполнения: многопоточная) и / md (библиотека времени выполнения: многопоточная-dll) моей библиотеки C ++ DLL с Visual Studio 2008.

Приложения, которыессылка на сборку / md работает нормально, но приложения, ссылающиеся на сбой сборки / mt.

Интересно, что приложения, ссылающиеся на статическую версию сборки / mt, работают нормально.

Есть лиимеет смысл собрать DLL с / mt и использовать ее с приложением, которое также скомпилировано с / mt?

Как я могу отследить причину такого рода сбоев?

С уважением,

Пол

1 Ответ

1 голос
/ 31 января 2012

Это зависит от вашего API. Если вы создаете свои исполняемые файлы с использованием не-DLL-версии библиотек времени выполнения, то каждая DLL и EXE получает свою собственную копию статических данных библиотек времени выполнения. Наиболее очевидный эффект заключается в том, что вы не можете выделить что-то динамически из одного модуля (DLL или EXE) и ожидать безопасного освобождения этого в другом модуле. Будут и другие, менее распространенные проблемы, например, если вы srand в одном модуле, не ожидайте, что это повлияет на вызовы rand во всем приложении.

Обычно наиболее безопасно в исполняемом файле, который связывается с другими пользовательскими DLL, чтобы скомпилировать их все с версией DLL библиотек времени выполнения. Возможно, вы захотите использовать статические версии библиотек времени выполнения, если вы строили статически связанный исполняемый файл с использованием статических библиотек, возможно, для простоты упаковки и распространения, но я не вижу большого преимущества в гибридной конфигурации с учетом потенциальных проблем. 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...