Как повторно использовать статический код библиотеки, который уже связан с библиотекой 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 что вы знаете наверняка работает с вашим приложением.

1

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

Других решений пока нет …

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