Я делюсь статической библиотекой с клиентом.
он использует vs2008 sp 1.
я использую стороннюю библиотеку, которую я собрал с помощью mfc с разделяемой версией dll и / MD
Затем я создал свою собственную статическую библиотеку, которая включает в себя эту стороннюю библиотеку с MFC с опцией shared dll и релизной версией / MD.
Я создал тестовую DLL, чтобы убедиться, что она работает. без проблем работает нормально.
Я не использую MFC вообще. только клиент — вот почему они сказали мне использовать MFC с общими dll и / MD.
теперь они жалуются, что они получают
xyz уже определен в ошибках msvcrt.lib (MSVCR90.dll). это похоже на ошибки LNK2005, я думаю.
они заявляют следующее:
«В частности, связывание не выполняется из-за того, что« моя библиотека »статически связывается со многими библиотеками, общими для более крупной сборки производственного инструментария. Эти общие функции библиотеки экспортируются« моей библиотекой », вызывая конфликты ссылок.
кроме того, они заявляют:
«Чтобы решить эту проблему,« моя библиотека »может выставлять только функции, связанные с одним API (из моей статической библиотеки), чтобы гарантировать отсутствие конфликтов ссылок. Экспортируемыми функциями можно управлять, когда« моя библиотека » построен с использованием комбинации параметров компоновщика и операторов определения модуля (.def file) «
Я не уверен, что может вызвать эту проблему. это не проблема с моей стороны, но есть.
Я думаю, может быть, у них возникают проблемы с использованием неправильных опций или неправильной версии CRT?
Кроме того, я не уверен, что могу выполнить их просьбу, возможно, не связываться с msvcrt.lib (MSVCR90.dll), так как моя статическая библиотека зависит от стандартных функций c и т. д.
я довольно потерян в данный момент, я исследовал пару ссылок
Как распространять библиотеки времени выполнения C (CRT)
а также
http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/
но если то, что указано в ссылке, проблема с CRT, то я не уверен, как выяснить, что CRT я использую мой статический lib в vs2008. Я использовал / подробный, чтобы увидеть его, но он не работает. и я знаю, что dumpbin или обходчик зависимостей не обрежут его для статической библиотеки.
Несколько дней боролся с этим и исследовал как сумасшедший. нет ответов на вопрос, почему у них могут быть проблемы с msvcrt.lib (MSVCR90.dll).
Получите имена конфликтующих библиотек из их сообщений об ошибках. Добавьте имена этих библиотек в настройки проекта вашей статической библиотеки (в настройках компоновщика, я верю). Должна быть строка «игнорировать библиотеки», здесь вы должны добавить имена библиотек. Убедитесь, что ваш проект компилируется и ваши тесты пройдены. Затем отправьте им свою вновь скомпилированную статическую библиотеку и посмотрите, есть ли у них конфликты. Если они это сделают, получите имена конфликтующих библиотек и повторите процесс.
это и подобные исправления описаны здесь: http://support.microsoft.com/kb/148652
Вы можете попытаться добавить поддержку MFC в свой проект, чтобы попытаться выявить конфликты локально в вашей среде разработки; Могу поспорить, что это приведет к тем же ошибкам, которые они получают. Это происходит, когда библиотеки времени выполнения C и библиотеки MFC выходят из строя.
Других решений пока нет …