Преобразование DLL в LIB - PullRequest
0 голосов
/ 24 июня 2019

Я знаю, что об этом спрашивали много раз, но почему-то, попробовав все эти решения, ни одно из них не работает для меня.

Я пытаюсь создать приложение Amazon Alexa AVS SDK для использования в Visual Studio. Я могу сгенерировать DLL, но мне нужно, чтобы они были в .LIB для компоновки.

Удалось сгенерировать файл DEF (я работаю над модулем AVSCommon), но он поврежден (фрагмент):

Dump of file libAVSCommon.dll

File Type: DLL

  Section contains the following exports for libAVSCommon.dll

    00000000 characteristics
    5D1068DF time date stamp Mon Jun 24 14:08:31 2019
        0.00 version
           1 ordinal base
        1276 number of functions
        1276 number of names

    ordinal hint RVA      name

        406  195 00048D40 _ZN14alexaClientSDK9avsCommon5utils6logger12ModuleLogger8setLevelENS2_5LevelE
        453  1C4 000470D0 _ZN14alexaClientSDK9avsCommon5utils6logger6Logger8setLevelENS2_5LevelE

Согласно https://gist.github.com/azadkuh/8957917, Я должен изменить файл DEF и оставить только имя функции. Так что теперь у меня есть это:

EXPORTS
_ZN14alexaClientSDK9avsCommon5utils6logger12ModuleLogger8setLevelENS2_5LevelE
_ZN14alexaClientSDK9avsCommon5utils6logger6Logger8setLevelENS2_5LevelE

Я проверил, когда это раскладывается, это выглядит так (но я не использовал это, я использовал только искаженный код выше):

alexaClientSDK::avsCommon::utils::logger::ModuleLogger::setLevel(alexaClientSDK::avsCommon::utils::logger::Level)
alexaClientSDK::avsCommon::utils::logger::Logger::setLevel(alexaClientSDK::avsCommon::utils::logger::Level)

А затем создайте библиотеку с помощью этой команды:

$> lib.exe /def:libAVSCommon.def /machine:x86 /out:libAVSCommon.lib

Однако, когда я использую сгенерированный .lib (также пробовал с .exp), он все равно выдает мне ту же ошибку:

1>ConsoleLogger.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall 
alexaClientSDK::avsCommon::utils::logger::Logger::setLevel(enum alexaClientSDK::avsCommon::utils::logger::Level)" 
(?setLevel@Logger@logger@utils@avsCommon@alexaClientSDK@@UAEXW4Level@2345@@Z)

Должен ли я удалить пространства имен ?? Что я делаю неправильно?? Помощь будет принята с благодарностью

...