LuaJIT lib, собранная с / MD, но не вызывает несоответствия библиотеки времени выполнения с / MDd программой?

Я скачал источник luajit с

http://luajit.org/git/luajit-2.0.git

и собрал его с помощью msvcbuild.bat

https://github.com/luvit/luajit-2.0/blob/master/src/msvcbuild.bat

Судя по пакетному файлу, он использует / MD для сборки lua51.lib.
Когда я связал библиотеку с моим приложением, я обнаружил, что Visual Studio 2013 не выдает несоответствие библиотеки времени выполнения, когда я использовал параметры / MDd для своего приложения.

Я также встроил другой источник в библиотеки, используя Visual Studio, и мне нужно создать две версии lib, чтобы избежать ошибки несоответствия.

Мой вопрос Можно ли построить библиотеку, которая могла бы использоваться как программой, скомпилированной с настройками / MD, так и / MDd?

Если ответ — да, безопасно ли это делать?

Если ответ «нет», то почему нет ошибки при связывании lua51.lib с приложением / MDd?

Благодарю.

редактировать

Сообщение об ошибке

Ошибка 20 ошибка LNK2038: обнаружено несоответствие для «RuntimeLibrary»: значение «MD_DynamicRelease» не соответствует значению «MDd_DynamicDebug» в Logger.obj

3

Решение

Вопрос 1:

Можно ли построить библиотеку, которая могла бы использоваться как программой, скомпилированной с настройками / MD, так и / MDd?

Ответ: да.

Вопрос 2:

Насколько это безопасно?

Краткий ответ: не всегда.

Более длинный ответ:

Когда флаг /MD используется, компилятор определяет макросы пропроцессора _MT, _DLL, когда /MDd используется, компилятор определяет макросы пропроцессора _MT, _DLL, _DEBUG,

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

4

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


По вопросам рекламы [email protected]