当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时
- 开源代码
- 2025-08-27 11:42:02

英文解决站点
applocal.ps1 fails in Visual Studio 2019 because of wildcard path in VcpkgAppLocalDLLs · Issue #28614 · microsoft/vcpkg
虽然这个bug不影响生成exe文件,第一次会弹出该错误,再次运行就正常,vcpkg会把对应的libcrypto-*-x64.dll版本复制到exe路径下..但是对于强迫症来说,还是别扭的.
找到vcpkg安装路径中
release版路径
installed\<环境路径>\plugins\qtdeploy.ps1
# This script is based on the implementation of windeployqt for qt5.7.1 # # Qt's plugin deployment strategy is that each main Qt Module has a hardcoded # set of plugin subdirectories. Each of these subdirectories is deployed in # full if that Module is referenced. # # This hardcoded list is found inside qttools\src\windeployqt\main.cpp. For # updating, inspect the symbols qtModuleEntries and qtModuleForPlugin. # Note: this function signature and behavior is depended upon by applocal.ps1 function deployPluginsIfQt([string]$targetBinaryDir, [string]$QtPluginsDir, [string]$targetBinaryName) { $baseDir = Split-Path $QtPluginsDir -parent $binDir = "$baseDir\bin" function deployPlugins([string]$pluginSubdirName) { if (Test-Path "$QtPluginsDir\$pluginSubdirName") { Write-Verbose " Deploying plugins directory '$pluginSubdirName'" New-Item "$targetBinaryDir\plugins\$pluginSubdirName" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null Get-ChildItem "$QtPluginsDir\$pluginSubdirName\*.dll" | % { deployBinary "$targetBinaryDir\plugins\$pluginSubdirName" "$QtPluginsDir\$pluginSubdirName" $_.Name resolve "$targetBinaryDir\plugins\$pluginSubdirName\$($_.Name)" } } else { Write-Verbose " Skipping plugins directory '$pluginSubdirName': doesn't exist" } } # We detect Qt modules in use via the DLLs themselves. See qtModuleEntries in Qt to find the mapping. if ($targetBinaryName -match "Qt5Cored?.dll") { if (!(Test-Path "$targetBinaryDir\qt.conf")) { "[Paths]" | Out-File -encoding ascii "$targetBinaryDir\qt.conf" } } elseif ($targetBinaryName -match "Qt5Guid?.dll") { Write-Verbose " Deploying platforms" New-Item "$targetBinaryDir\plugins\platforms" -ItemType Directory -ErrorAction SilentlyContinue | Out-Null Get-ChildItem "$QtPluginsDir\platforms\qwindows*.dll" | % { deployBinary "$targetBinaryDir\plugins\platforms" "$QtPluginsDir\platforms" $_.Name } deployPlugins "accessible" deployPlugins "imageformats" deployPlugins "iconengines" deployPlugins "platforminputcontexts" deployPlugins "styles" } elseif ($targetBinaryName -match "Qt5Networkd?.dll") { deployPlugins "bearer" if (Test-Path "$binDir\libcrypto-3-x64.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-3-x64.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-3-x64.dll" } if (Test-Path "$binDir\libcrypto-3.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-3.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-3.dll" } } elseif ($targetBinaryName -match "Qt5Sqld?.dll") { deployPlugins "sqldrivers" } elseif ($targetBinaryName -match "Qt5Multimediad?.dll") { deployPlugins "audio" deployPlugins "mediaservice" deployPlugins "playlistformats" } elseif ($targetBinaryName -match "Qt5PrintSupportd?.dll") { deployPlugins "printsupport" } elseif ($targetBinaryName -match "Qt5Qmld?.dll") { if(!(Test-Path "$targetBinaryDir\qml")) { if (Test-Path "$binDir\..\qml") { cp -r "$binDir\..\qml" $targetBinaryDir } elseif (Test-Path "$binDir\..\..\qml") { cp -r "$binDir\..\..\qml" $targetBinaryDir } else { throw "FAILED" } } foreach ($a in @("Qt5Quick", "Qt5Quickd", "Qt5QmlModels", "Qt5QmlModelsd", "Qt5QuickControls2", "Qt5QuickControls2d", "Qt5QuickShapes", "Qt5QuickShapesd", "Qt5QuickTemplates2", "Qt5QuickTemplates2d", "Qt5QmlWorkerScript", "Qt5QmlWorkerScriptd", "Qt5QuickParticles", "Qt5QuickParticlesd", "Qt5QuickWidgets", "Qt5QuickWidgetsd")) { if (Test-Path "$binDir\$a.dll") { deployBinary "$targetBinaryDir" "$binDir" "$a.dll" } } deployPlugins "scenegraph" deployPlugins "qmltooling" } elseif ($targetBinaryName -match "Qt5Quickd?.dll") { foreach ($a in @("Qt5QuickControls2", "Qt5QuickControls2d", "Qt5QuickShapes", "Qt5QuickShapesd", "Qt5QuickTemplates2", "Qt5QuickTemplates2d", "Qt5QmlWorkerScript", "Qt5QmlWorkerScriptd", "Qt5QuickParticles", "Qt5QuickParticlesd", "Qt5QuickWidgets", "Qt5QuickWidgetsd")) { if (Test-Path "$binDir\$a.dll") { deployBinary "$targetBinaryDir" "$binDir" "$a.dll" } } deployPlugins "scenegraph" deployPlugins "qmltooling" } elseif ($targetBinaryName -like "Qt5Declarative*.dll") { deployPlugins "qml1tooling" } elseif ($targetBinaryName -like "Qt5Positioning*.dll") { deployPlugins "position" } elseif ($targetBinaryName -like "Qt5Location*.dll") { deployPlugins "geoservices" } elseif ($targetBinaryName -like "Qt5Sensors*.dll") { deployPlugins "sensors" deployPlugins "sensorgestures" } elseif ($targetBinaryName -like "Qt5WebEngineCore*.dll") { deployPlugins "qtwebengine" } elseif ($targetBinaryName -like "Qt53DRenderer*.dll") { deployPlugins "sceneparsers" } elseif ($targetBinaryName -like "Qt5TextToSpeech*.dll") { deployPlugins "texttospeech" } elseif ($targetBinaryName -like "Qt5SerialBus*.dll") { deployPlugins "canbus" } }将文件中出现 libcrypto-*-x64.dll ,libssl-*-x64.dll中的*直接改为编译好的dll中的数字,笔者的vcpkg中的版本为3,所以改成了3就正常了,反正就是不要出现*号通配符.
deployPlugins "bearer" if (Test-Path "$binDir\libcrypto-*-x64.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-*-x64.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-*-x64.dll" } if (Test-Path "$binDir\libcrypto-*.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-*.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-*.dll" } 改为: deployPlugins "bearer" if (Test-Path "$binDir\libcrypto-3-x64.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-3-x64.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-3-x64.dll" } if (Test-Path "$binDir\libcrypto-3.dll") { deployBinary "$targetBinaryDir" "$binDir" "libcrypto-3.dll" deployBinary "$targetBinaryDir" "$binDir" "libssl-3.dll" }debug版路径
笔者电脑路径: G:\vcpkg\installed\x64-windows\debug\plugins
直接将release版本改好的替换即可,32位环境下也是一样的
当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时”