最后,我将Casablanca / CPPRESTSDK与VS17链接在一起,感谢Statically linking Casablanca/CPPREST SDK和其他文章。但是现在我看到,当我启动项目时,由于某种原因,VS会在.exe文件夹中自动生成3个DLL文件zlib1.dll
SSLEAY32.dll
LIBEAY32.dll
,但实际上我是静态链接的,因为根本没有它们。我也有vcpkg-master\installed\x86-windows-static\lib
的lib格式的这些文件,我可以以某种方式代替dll使用它们吗?
最佳答案
我有同样的问题。我有一个Visual Studio解决方案,其中包含在共享DLL中使用MFC并使用多线程DLL运行时库的项目。我想静态链接到cpprestsdk,而无需分发三个额外的DLL。链接到cpprestsdk的静态版本不起作用:由于运行时库冲突(/MT
-多线程和/MD
-多线程DLL)冲突,我无法链接。我找不到使用/MD
开关(多线程DLL)但导出为库的预编译版本。所以我必须自己编译。
我的解决方案:
vcpkg
(https://github.com/microsoft/vcpkg)。这是一个程序包C和C++库程序包管理器。您将需要“引导”它。请参阅快速入门。 cmake ../Release -A win32 -DCMAKE_TOOLCHAIN_F ILE=d:\jw\git\vcpkg\scripts\buildsystems\vcpkg.cmake
。 cpprestsdk.sln
解决方案,并对cpprest
项目中的Release和Debug配置执行以下操作:.lib
。 然后,我可以在解决方案中使用生成的库。
packages
目录添加zlib和openssl库。 bcrypt.lib
,winhttp.lib
和crypt32.lib
添加到链接器输入(Statically linking Casablanca/CPPREST SDK)_NO_ASYNCRTIMP
添加到使用cpprestsdk的项目中。 我希望这可以帮助某人节省一些我失去工作的时间!