MSVC 2008 - Неразрешенные внешние ошибки с LIB, но только с DLL, а не с проектом EXE

У меня есть DLL, которую я пытаюсь связать с libjpeg LIB с помощью MSVC 2008, которая генерирует ошибки Unresolved External Symbol для функций libjpeg. У меня также есть тестовый проект, который связан с тем же файлом библиотеки libjpeg и без ошибок, и тоже отлично работает.

Я трижды проверил свой путь к LIB и настройки списка зависимых LIBS, буквально скопировал и вставил их из проекта EXE в проект DLL. Я все еще получаю ошибки. У меня есть заголовки libjpeg include, окруженные extern "C", поэтому это не проблема искажения имени, а неразрешенные внешние предупреждения показывают "отсутствующие" функции libjpeg как неукрашенные (только начальное подчеркивание и суффикс количества байтов параметра знака @ после каждого имя).

Что могло сделать компоновщик с проектом DLL неспособным правильно найти функции, если у тестового проекта EXE вообще нет проблем? Я использую предварительно скомпилированную 32-битную статическую многопоточную библиотеку отладки, которую я скачал с ClanLib.

Спасибо Роберт


person Robert Oschler    schedule 04.04.2010    source источник


Ответы (1)


После долгих экспериментов я нашел решение. Оказывается, проблема возникла из-за разницы в соглашении о вызовах, используемом проектами DLL и LIB (в MSVC 2008 это устанавливается в свойствах проекта, параметр «Свойства конфигурации -> C / C ++ -> Дополнительно». Библиотека DLL Для проекта было задано значение __stdcall, а для LIB было указано значение __cdecl. Перекомпиляция LIBJPEG с __stdcall устранила проблему.

person Robert Oschler    schedule 04.04.2010