CryptAcquireContext неразрешенный внешний

Я связываюсь со сторонней библиотекой (Poco C++) и получаю от компоновщика следующие неразрешенные ошибки символов. Кажется, он не может найти «CryptAcquireContextW», «CryptReleaseContext» и «CryptGenRandom».

Согласно информации Microsoft здесь эти функции можно связать с помощью «Advapi32.lib». Я добавил это во входные данные компоновщика, но символы остаются неразрешенными.

1>PocoFoundationCLR.lib(RandomStream.obj) : error LNK2019: unresolved external symbol __imp__CryptAcquireContextW@20 referenced in function "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z)

1>PocoFoundationCLR.lib(RandomStream.obj) : error LNK2019: unresolved external symbol __imp__CryptReleaseContext@8 referenced in function "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z)

1>PocoFoundationCLR.lib(RandomStream.obj) : error LNK2019: unresolved external symbol __imp__CryptGenRandom@12 referenced in function "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z)

Я проверил, что Advapi32.lib находится в пути поиска, а Advapi32.dll находится в каталоге Windows, поэтому я не уверен, почему эта ошибка продолжает происходить.

Идеи, кто-нибудь?

Спасибо!


person Bungles    schedule 03.06.2015    source источник
comment
Я только что попытался вызвать CryptReleaseContext из Visual Studio 2010, и advapi32.lib был необходим и достаточен для успешной связи. Возможно, вам следует перепроверить, что advapi32.lib действительно указывается в командной строке компоновщика? (О, и что это правильная разрядность.)   -  person Harry Johnston    schedule 03.06.2015
comment
Попробуйте установить связь с Crypt32.lib   -  person Igor Tandetnik    schedule 03.06.2015
comment
Спасибо, парни. У меня есть новая информация. Я могу нормально собрать на своем личном ПК с VS 2013 Professional, используя только Advapi32.lib в строке ввода компоновщика. Но ПК, на котором это не удается, использует VS 2013 Community Edition. Возможно ли, что Advapi32.lib доступен только в версии Pro? Это не имеет большого смысла, но это единственная реальная разница между ПК.   -  person Bungles    schedule 03.06.2015
comment
Попробуйте установить SDK и изменить параметры проекта, чтобы использовать его, а не версию, включенную в Visual Studio.   -  person Harry Johnston    schedule 04.06.2015
comment
Я пробовал это, но добавление пути SDK в систему вызвало массу повторяющихся символов и проблем с заголовками. Мне, вероятно, потребуется значительно переделать файлы проекта, чтобы это заработало. К счастью, на этот раз я проскочил мимо, не нуждаясь в этом. :-)   -  person Bungles    schedule 04.06.2015


Ответы (1)


Хотя я не могу с готовностью объяснить, почему это сработало, вот что сработало.

Проект, в котором произошел сбой, имел «Advapi32.lib», указанный в разделе «Унаследованные» входных данных компоновщика, но, по-видимому, на самом деле не был связан.

Я добавил «Advapi32.lib» в раздел «дополнительные библиотеки», и каким-то образом это заставило его правильно подобрать и связать.

Я собираюсь списать это на разницу в том, как VS 2013 был установлен на двух ПК, но это все равно любопытная странность.

person Bungles    schedule 04.06.2015