Кажется, компилятор следует шаблону для декорирования этих экспортируемых функций. На платформе x86
с _cdecl calling convention
для каждой функции, экспортируемой через .def file
или __declspec(dllexport)
, файл .lib
содержит 2 записи. Одна в качестве имени функции с префиксом _
, а другая с префиксом __imp__
Например, если def file
имеет экспортированную функцию как Function1
, библиотека будет иметь _Function1
и __imp__Function1
Это изменится для x64
и других соглашений о вызовах функций.
С учетом сказанного выше, мой случай был особенным. Мой файл определения имел Object
, _Object
и __Object
, что должно привести к _Object
, __imp__Object
, __Object
, __imp___Object
, ___Object
и __imp____Object
.
сейчасиз вышеприведенного списка 2-е фактическое имя (_Object
) и 1-е сгенерированное имя совпадают, поэтому было пропущено создание символов для 2-го имени. Следовательно, я получаю сообщение об ошибке:
ошибка LNK2001: неразрешенный внешний символ __imp ___ Object