Я скачал источник 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
Вопрос 1:
Можно ли построить библиотеку, которая могла бы использоваться как программой, скомпилированной с настройками / MD, так и / MDd?
Ответ: да.
Вопрос 2:
Насколько это безопасно?
Краткий ответ: не всегда.
Более длинный ответ:
Когда флаг /MD
используется, компилятор определяет макросы пропроцессора _MT, _DLL
, когда /MDd
используется, компилятор определяет макросы пропроцессора _MT, _DLL, _DEBUG
,
Возможно, что один или несколько классов будут иметь разные переменные-члены в зависимости от того, _DEBUG
определено. В этом случае, скорее всего, небезопасно смешивать коды, скомпилированные с разными флагами. Если вы абсолютно уверены, что ни один из объектов, передаваемых между двумя наборами кода, не имеет этой проблемы, возможно, безопасно смешать два набора кода / библиотеки.