MS Visual Studio 2010: _UzpVersion запрашивается объектным файлом, но _UzpVersion @ 0 экспортируется библиотекой

Я пытаюсь построить свой проект с использованием MS Visual Studio 2010 с помощью библиотеки распаковки Info-ZIP. Когда я вставил UzpVersion() вызов в коде, компоновщик не сказал:

ошибка LNK2019: неразрешенный внешний символ _UzpVersion, указанный в функции _wmain

DUMPBIN показывает, что библиотека экспортирует _UzpVersion@0 (он был скомпилирован с тем же компилятором). Но объектный файл запрашивает _UzpVersion, Функция объявлена ​​как:

extern "C" {

const UzpVer * UzpVersion(void);

}

Что с этим не так? Как это исправить? Извините, я не очень разбираюсь в Visual C ++; Я провел большую часть своего времени с GNU C ++.

1

Решение

Это ошибка связи. Компилятор видит объявление UzpVersion, иначе он не смог бы скомпилироваться. Вы должны убедиться, что вы настроили свой проект для включения .lib.

введите описание изображения здесь

РЕДАКТИРОВАТЬ: Кроме того, вы сказали, что вы собираете его самостоятельно. Убедитесь, что вы компилируете исходники как C, а не C ++.

0

Другие решения

Разобрался сам.

Библиотека скомпилирована с __stdcall соглашение о вызовах, но не объявляет экспортируемые функции как таковые. Visual Studio 2010 по умолчанию компилирует проект с /Gd флаг, который переключается на __cdecl Соглашение о вызовах. Помимо прочего, в этих соглашениях о вызовах также используются различные схемы искажения имен для функций C.

Ты можешь читать подробности о MSDN.

В частности, для библиотеки Info-ZIP проблема устраняется путем добавления следующих определений перед включением unzip.h заголовок:

#define EXPENTRY __stdcall
#define USE_UNZIP_LIB
0

По вопросам рекламы [email protected]