Может кто-нибудь, пожалуйста, помогите мне понять процесс.
в C ++ Visual Studio 2010
у меня есть визуальное студийное решение (назовем его mysol)
у меня есть проект, построенный как статическая библиотека (назовем его staticprj)
staticprj должен использовать библиотеку извне (назовем ее ext.lib)
в теле исходного кода staticprj я включаю внешний заголовочный файл библиотеки с
# включайте extlib.h и вызывайте некоторые из его функций (пусть они называются extfunctions ())
я также включаю путь к расположению заголовочных файлов ext.lib.
staticprj компилируется нормально без ошибок
У mysol также есть другой проект, который представляет собой динамическую библиотеку (dynprj) и зависит от staticprj.
Также в исходных файлах dynprj используются функции извне библиотеки.
я включил #include extlib.h в исходный код dynprj.
я включил путь к заголовочным файлам
я подключил extlib.h напрямую к dynprj
я также добавил ext.lib к входу компоновщика (вместе с путем, где находится ext.lib).
я все еще получаю ошибку lnk2001 о том, что extfunctions (), где не найден.
вся структура (решение mysol) компилируется нормально, если я вообще не использую ext.lib.
Мой вопрос: как работает процесс связывания и что я могу сделать, чтобы исправить эту ошибку связывания?
(обратите внимание, что без наличия ext.lib у меня нет проблем со связыванием staticprj и dynprj. Моя компиляция работает нормально, а мой код работает. Ошибка связывания появляется только тогда, когда я пытаюсь связать другой ext.lib со staticprj и dynprj и использую функции из ext.lib)
заранее спасибо.
Я не совсем уверен, что это будет работать, но попробуйте поместить DLL в папку отладки «mysol». У меня была похожая проблема пару недель назад, когда у меня была библиотека, скомпилированная как .dll. Я просто поместил этот .dll в мою папку отладки и работал прекрасно.
Других решений пока нет …