Вопрос

Правильно ли связывать статическую библиотеку (.lib), скомпилированную с помощью VS 2005, с программой, которая скомпилирована с помощью VS 2008?И библиотека, и моя программа написаны на C ++.Эта программа запущена на профессиональном эмуляторе Windows Mobile 6.

Кажется, это работает, ошибок привязки нет.Однако программа выходит из строя во время запуска, потому что внутри связанной библиотеки происходят странные вещи.Например.библиотека может возвращать вектор символов размером с большое отрицательное число.

Таких проблем нет, когда программа скомпилирована с VS 2005.

Что еще более странно, проблема возникает только при использовании конфигурации выпуска для сборки.При компиляции с использованием конфигурации отладки проблема не возникает.

Это было полезно?

Решение

VS2005 и VS2008 используют разные реализации STL.Когда код VS2005 возвращает вектор, объект имеет расположение памяти, отличное от ожидаемого VS2008.Это должно быть причиной неправильных значений, которые вы видите в возвращаемой дате.

Как правило, вы всегда должны компилировать все модули C ++ проекта с одним и тем же компилятором, и все настройки /#defines равны.

Одним конкретным #define, который вызывает подобное поведение, является SECURE_SCL #define из VS2008.Два модуля, скомпилированные с разными настройками, создадут именно ваши проблемы, потому что #defining SECURE_SCL вводит больше переменных-членов в различные библиотечные классы C ++.

Другие советы

Нет ничего неправильного в том, чтобы ссылаться на старую библиотеку так, как вы описываете, но меня не удивляет, что вы видите какое-то странное поведение.Пара проверок на вменяемость:

  • Являются ли оба файла использующими те же версии из числа те же библиотеки времени выполнения?
  • Является ли ваше .Исполняемое приложение "видящим" те же заголовочные файлы, для которых была создана .библиотека?Убедитесь, что макросы _WIN32_WINNT (и т.д.) заявлено надлежащим образом.

И когда вы говорите .LIB, вы имеете в виду настоящую статическую библиотеку (mylib.lib) или библиотеку импорта для DLL (mylib.lib -> mylib.dll)?

И каковы настройки компиляции / ссылки для вашего исполняемого проекта VS2008?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top