MSVC 2008 - нерешенные внешние ошибки с LIB, но только с DLL, а не с проектом EXE - PullRequest
1 голос
/ 04 апреля 2010

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

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

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

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

1 Ответ

1 голос
/ 04 апреля 2010

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

...