Краткая версия: слушайте ребят на Boost ML.Boost не поддерживает то, что вы пытаетесь сделать, и в любом случае это плохая идея.Лучше всего принять это и заставить другую библиотеку использовать динамическое время выполнения.
Более длинная версия:
Похоже, вы неправильно понимаете, что говорит вам Boost.Вы пытаетесь проанализировать исходный код Boost вместо того, чтобы просто прочитать то, что он говорит:
auto_link.hpp (строка 354): «Смешивать библиотеку dll boost со статической средой выполнения очень плохоidea ... ".
Boost считает, что вы создаете DLL, одновременно статически связываясь с библиотеками времени выполнения.Что именно вы делаете;Boost точно определил, что вы пытаетесь сделать.
Ваша проблема в том, что библиотека Boost не поддерживает поддержку , встроенную в DLL, которая не динамически связывается с библиотеками времени выполнения.Причина в том, что это «действительно плохая идея».Таким образом, они проверяют, пытаетесь ли вы это сделать, и останавливают сборку с сообщением об ошибке, напоминающим вам об этом.
«Свободные друзья» в Boost, которые не знают, как заставить что-то работать »"из коробки" предотвратите это, потому что статическая ссылка на среду выполнения в DLL обычно является ошибкой пользователя.Это либо сделано случайно, либо из-за незнания основных проблем, которые это может создать.
Если вы статически ссылаетесь на среды выполнения, у каждой DLL / exe будет своя копия среды выполнения со своими глобальными переменными.А так как heap управляется через глобальные переменные, это означает, что каждая DLL / exe будет иметь свою собственную кучу.Так что если вы попытаетесь освободить память, выделенную в другом адресном пространстве ... бум.И это намного проще, чем вы думаете, если вы не будете осторожны.
Это может вызвать и другие проблемы.«Фриларты» пытаются помешать вам выстрелить себе в ногу.Но, очевидно, вы знаете лучше, чем «навязывать свою чушь честным и ничего не подозревающим пользователям», которые могут захотеть получить уведомление, когда они собираются проехать по обрыву.
Теперь вы можете просто удалить сообщение об ошибке.Большая часть Boost - это заголовки, поэтому, если вы на самом деле не ссылаетесь ни на один из его .libs, у вас все будет хорошо.Тем не менее, я предполагаю, что auto_link.hpp используется только теми частями Boost, которые являются .libs. Скорее всего, факт, что вы столкнулись с ним, означает, что вы пытаетесь связать его с Boost .lib.
Переход на динамическое связывание во время выполнения (/ MD и / MDd) невозможен, поскольку статическое связывание было выбрано (1) из соображений безопасности и (2) другая библиотека использует статическое связывание.
Если безопасность имеет значение, вы должны знать об этом: сам факт создания библиотеки DLL означает, что ваше приложение потенциально открыто для инъекций DLL, независимо от того, как вы ссылаетесь на среды выполнения.Поэтому я не понимаю, насколько динамическое связывание менее безопасно, чем статическое.