Как повторно использовать статический код библиотеки, который уже связан с библиотекой DLL с другим приложением C++ в Visual Studio 2010?

Я работаю над решением C++ в Visual Studio 2010. У меня есть файл DLL, который использует некоторые стандартные библиотечные функции C++ (например, строковые или файловые функции). По некоторым причинам переносимости я должен скомпилировать эту DLL с /MT опция, поэтому все необходимые функции библиотеки времени выполнения будут связаны с выпущенным файлом DLL.

У меня есть другой проект C++, который является приложением Windows, этот проект также компилируется с /MT опция и генерирует автономный исполняемый файл. Второй проект также использует те же стандартные библиотечные функции C++, которые уже связаны в моей DLL (исполняемый файл также использует некоторые экспортируемые из DLL методы).

Теперь вот мой вопрос: есть ли способ сообщить компоновщику, который не связывает общие функции времени выполнения, которые уже связаны с файлом DLL, и не связывает эти общие части снова в exe-файле (например, повторно использовать тот же код для строковых функций, которые уже связаны с моей DLL)?

1 ответ

Нет, ты не можешь этого сделать. Хотя исполняемый файл зависит от DLL, их все равно можно рассматривать как отдельные и автономные двоичные артефакты, каждый из которых должен содержать необходимые символы для правильного выполнения.

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

Хотя Microsoft Visual C Runtime включена на большинстве платформ, существует много разных версий, некоторые из которых содержат ошибки или нарушают обратную совместимость. Таким образом, всегда полезно распространять версию msvcr*.dll что вы знаете наверняка работает с вашим приложением.

Другие вопросы по тегам