В этом посте я получил решение: я должен связаться с Advapi32.lib ... Мой вопрос: как я могу это узнать?
Когда вы получите "«неразрешенная внешняя» ошибка компоновщика, это означает, что он искал совпадение для имени функции или переменной, в котором нуждается какой-либо объектный файл, и компоновщик не смог найти это имя, определенное в одном из объектных файлов или библиотек.
Начните с рассмотрения первой из этих ошибок (я переформатировал ее, чтобы сделать ее немного более читабельной - я призываю вас сделать то же самое в следующий раз, когда вы столкнетесь с одной из них):
TD_ExamplesCommon.lib(ExHostAppServices.obj) : error LNK2019: unresolved external symbol
__imp__RegEnumValueW@32 referenced in function
"public: virtual bool __thiscall ExHostAppServices::ttfFileNameByDescriptor(
class OdTtfDescriptor const &,class OdString &)"
(?ttfFileNameByDescriptor@ExHostAppServices@@UAE_N ABVOdTtfDescriptor@@AAVOdString@@@Z)
В этом сообщении об ошибке много всего (большая часть может выглядеть как мусор).К счастью, многое из этого можно игнорировать в большинстве случаев.Наиболее важным моментом является то, что компоновщик ищет символ __imp__RegEnumValueW@32
В названии есть какой-то ганк, но, к счастью, он все равно довольно узнаваем.
- Префикс
__imp__
указывает, что он ищетИмпорт DLL.Почти во всех случаях, которые можно игнорировать для ваших целей. - суффикс
@32
- это то, что компилятор Microsoft добавляет к именам функций для определенных соглашений о вызовах.Это также, как правило, не важно для ваших целей (для записи это означает, что функция ожидает 32 байта данных аргумента)
Так что нам остается тот факт, что компоновщик ищет RegEnumValueW
,Это очень похоже на название Win32 API.
Если вы посмотрите на документы для RegEnumValueW
(или RegEnumValue
, так как многие Win32 API имеют варианты A
и W
для обработки сборок ANSI / UNICODE) в документации мы найдем этот бит информации:
Requirements
Minimum supported client Windows 2000 Professional
Minimum supported server Windows 2000 Server
Header Winreg.h (include Windows.h)
>> Library Advapi32.lib
DLL Advapi32.dll
Unicode and ANSI names RegEnumValueW (Unicode) and
RegEnumValueA (ANSI)
Вот как вы знаете, вам нужно advapi32.lib
.
Так что в будущем, когдавы получаете «неразрешенную внешнюю» ошибку от компоновщика, просто игнорируете большую часть мусора в сообщении об ошибке и концентрируетесь на символе, который говорит, что он не может найти - это должно привести вас к библиотеке, объектному файлу или другому элементу, который вы можете
Просто для записи, advapi32.lib
понадобится большинству приложений Windows любой сложности.