VS 2005 и 2008 библиотека ссылок - PullRequest
4 голосов
/ 08 сентября 2008

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 08 сентября 2008

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

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

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

2 голосов
/ 08 сентября 2008

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

  • Оба файла используют одинаковые версии из одинаковых библиотек времени выполнения ?
  • Ваше .EXE-приложение "видит" те же заголовочные файлы, на которых был создан .LIB? Убедитесь, что макросы _WIN32_WINNT (и т. Д.) объявлены правильно .

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

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

...