Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa guida è destinata agli utenti che riscontrano problemi durante l'installazione delle porte tramite vcpkg.
Individuare i log degli errori
Gli errori di compilazione possono verificarsi per un numero quasi infinito di motivi. Quando vcpkg non riesce a compilare una porta, il primo passaggio per diagnosticare il motivo consiste nel leggere i file di log.
vcpkg genera un file di log per ogni processo esterno che viene richiamato durante la compilazione di una porta. Quando si verifica un errore, vcpkg stampa il percorso del file di log per l'ultimo processo eseguito prima dell'errore ocurred. Cercare la riga "Vedere i log per altre informazioni:" nell'output vcpkg.
Esempio: output del percorso dei file di log
See logs for more information:
C:\Users\viromer\work\vcpkg\buildtrees\detect_compiler\config-x64-linux-rel-CMakeCache.txt.log
C:\Users\viromer\work\vcpkg\buildtrees\detect_compiler\config-x64-linux-out.log
È possibile trovare tutti i file di log prodotti esaminando la directory della buildtrees
porta che si trova in $VCPKG_ROOT/buildtrees/<port>/
(sostituire <port>
con il nome della porta appropriato).
Impossibile scaricare gli asset della porta
Nota
L'uso della memorizzazione nella cache degli asset consente di attenuare questo tipo di problemi garantendo la disponibilità continua degli asset memorizzati nella cache.
Quando si installa una porta si verifica un errore durante il download di un asset dalla rete.
CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:32 (message):
Failed to download file with error: 1
Causa 1: L'URL di download non è più valido
Per motivi esterni agli URL di controllo di vcpkg può diventare non valido. I collegamenti interrotti possono essere diagnosticati usando un Web browser per passare all'URL di download, un collegamento interrotto genererà un codice di stato 404.
Procedura di risoluzione:
1 - Modificare la porta per usare un URL di download alternativo per l'asset.
Causa 2: l'hash del file non corrisponde al previsto SHA512
error: Failed to download from mirror set
error: File does not have the expected hash:
url: https://github.com/OpenImageIO/oiio/archive/v2.4.13.0.tar.gz
File: /home/user/vcpkg/downloads/OpenImageIO-oiio-v2-9325beef.4.13.0.tar.gz.1925416.part
Expected hash: 9325beefce55b66a58fcfc2ce93e1406558ed5f6cc37cb1e8e04aee470c4f30a14483bebfb311c329f7868afb6c508a052661c6b12d819a69f707c1a30cd9549
Actual hash: 9e887c7039995ce7c41556e09a7eed940863260a522ecf7d9bec300189026ed507da560620dfa4a619deeb679be7adf42fe3a7020ff3094df777c7934c771227
Questo errore si verifica quando il file upstream è stato modificato in qualsiasi modo dal server, ma l'URL di download viene mantenuto lo stesso. Come misura di sicurezza, vcpkg rifiuterà i file con SHA512 che non corrispondono al previsto SHA512 per l'asset.
Procedura di risoluzione:
1 - Verificare che il file scaricato sia sicuro 2 - Modificare la porta per usare il nuovo file SHA512
Impossibile trovare la toolchain di Visual Studio
Quando si installa una porta vcpkg non è in grado di individuare una toolchain appropriata:
error: in triplet arm-windows: Unable to find a valid toolchain for requested target architecture arm.
The selected Visual Studio instance is at: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
The available toolchain combinations are: x86, amd64, x86_amd64, amd64_x86
Causa 1: la toolchain appropriata per l'architettura di destinazione non è installata
Se l'istanza di Visual Studio corrisponde alla versione vcpkg desiderata e viene visualizzato questo errore, la causa più probabile è che la toolchain appropriata non sia installata.
- Aprire il Programma di installazione di Visual Studio e installare la toolchain appropriata.
Causa 2: La versione selezionata di Visual Studio non è corretta
Se la toolchain richiesta è installata, vcpkg potrebbe aver selezionato una versione non corretta di Visual Studio in cui la toolchain non è installata. Per altre informazioni, vedere la documentazione relativa all'algoritmo di selezione di Visual Studio.
Procedura di risoluzione:
1 - Impostare sulla VCPKG_PLATFORM_TOOLSET
versione appropriata.
2 - In alternativa, impostare il VCPKG_VISUAL_STUDIO_PATH
sul percorso di installazione dell'istanza di Visual Studio desiderato.
Dipendenze di sistema mancanti
Nell'ambiente non è installato uno strumento di compilazione o una dipendenza di sistema necessaria.
Esempio: La porta richiede dipendenze di sistema
alsa currently requires the following programs from the system package manager:
autoconf autoheader aclocal automake libtoolize
On Debian and Ubuntu derivatives:
sudo apt install autoconf libtool
On recent Red Hat and Fedora derivatives:
sudo dnf install autoconf libtool
On Arch Linux and derivatives:
sudo pacman -S autoconf automake libtool
On Alpine:
apk add autoconf automake libtool
La maggior parte delle porte vcpkg che richiedono dipendenze di sistema stampano un messaggio durante l'installazione. In alcuni casi, l'elenco delle dipendenze di sistema necessarie potrebbe essere incompleto. La diagnosi di questo tipo di problemi dipende dal sistema compilato sottostante, controllare i log degli errori per determinare la causa dell'errore.
Procedura di risoluzione:
1 - Seguire i passaggi appropriati per installare la dipendenza di sistema mancante nell'ambiente.
La dipendenza FetchContent non viene trovata durante il processo di compilazione
Una compilazione ha esito negativo perché una dipendenza è stata soddisfatta tramite FetchContent
non è disponibile durante il processo di compilazione.
include(FetchContent)
FetchContent_Declare(fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG master
)
FetchContent_MakeAvailable(fmt)
CMake Error at CMakeLists.txt:23 (target_link_libraries):
Target "my_sample_lib" links to:
fmt::fmt
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
vcpkg disabilita FetchContent
tramite la variabile FETCHCONTENT_FULLY_DISCONNECTED
CMake .
Ci sono più motivazioni per disabilitare questa funzionalità, per denominare alcuni:
FetchContent
può nascondere le dipendenze fornitore sulle porte.FetchContent
non interagisce bene con scenari completamente disconnessi.- Le dipendenze acquisite tramite
FetchContent
possono modificare la compilazione senza partecipare al calcolo hash ABI.
Per i gestori delle porte, è consigliabile che qualsiasi pacchetto acquisito tramite FetchContent
venga trasformato in una dipendenza vcpkg. Tuttavia, per l'uso generale sono disponibili soluzioni alternative per abilitare FetchContent
.
Procedura di risoluzione:
1 - Usare VCPKG_CMAKE_CONFIGURE_OPTIONS
da impostare FETCHCONTENT_FULLY_DISCONNECTED=FALSE
Le dipendenze installate da vcpkg non sono collegate durante la compilazione del progetto
Quando si compila il progetto tramite la modalità manifesto o la modalità classica, le dipendenze vcpkg non vengono caricate e collegate al progetto, causando errori di compilazione.
vcpkg offre il collegamento automatico delle librerie e include le directory per i progetti CMake e MSBuild . Le dipendenze installate tramite vcpkg devono essere disponibili automaticamente per l'utilizzo nel progetto.
Causa 1: Le dipendenze necessarie non sono installate
Procedura di risoluzione:
1 - Assicurarsi che le dipendenze del progetto siano pronte:
Se si usa un file manifesto (vcpkg.json
), assicurarsi che il file si trovi nella stessa directory contenente il CMakeList.txt
file. Assicurarsi inoltre che tutte le dipendenze siano elencate nel "dependencies"
campo nel manifesto. vcpkg installerà automaticamente le dipendenze nel manifesto quando si compila il progetto.
Se si usa l'interfaccia della riga di comando di vcpkg per installare i pacchetti in modalità classica, assicurarsi che tutte le dipendenze necessarie siano preinstallate prima di eseguire la compilazione del progetto. vcpkg non installa automaticamente i pacchetti richiesti dal progetto quando viene usato in modalità classica.
Causa 2: L'integrazione per il sistema di compilazione non è abilitata
CMake
Procedura di risoluzione:
1 - Impostare la CMAKE_TOOLCHAIN_FILE
variabile sulla toolchain vcpkg.
Deve CMAKE_TOOLCHAIN_FILE
essere impostato in modo che punti al file toolchain Vcpkg CMake che si trova in {VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
, assicurarsi di sostituire {VCPKG_ROOT}
con il percorso corretto per la directory di installazione vcpkg.
È possibile usare uno dei metodi seguenti per impostare il file toolchain:
- Uso di un
CMakePresets.json
file:- Impostare
toolchainFile
se si usa la versione 3 o successiva. - Impostare
CMAKE_TOOLCHAIN_FILE
comecacheVariable
se si usa la versione 2 o precedente.
- Impostare
- Passare l'oggetto
-DCMAKE_TOOLCHAIN_FILE={VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
argomento della riga di comando durante la chiamata a CMake. - Impostare
CMAKE_TOOLCHAIN_FILE
nelCMakeList.txt
file. Assicurarsi che questa variabile sia impostata prima di qualsiasi chiamata aproject()
.
Se si usa già un file toolchain personalizzato tramite CMAKE_TOOLCHAIN_FILE
, impostare VCPKG_CHAINLOAD_TOOLCHAIN_FILE
tramite un triplo personalizzato per puntare alla toolchain personalizzata.
MSBuild
vcpkg fornisce un meccanismo di integrazione globale tramite il vcpkg integrate install
comando .
Quando il comando viene eseguito una sola volta, l'integrazione di vcpkg diventa abilitata per tutti i progetti che usano MSBuild, con la modalità manifesto o la modalità classica.
Questa integrazione è specifica per l'istanza vcpkg da cui è stato eseguito il comando, quindi se sono presenti più istanze vcpkg, solo la versione dello strumento e i pacchetti installati in tale istanza specifica sono disponibili nei progetti.
Leggere la documentazione sull'integrazione di MSBuild per informazioni su come abilitare l'integrazione di vcpkg per un singolo progetto o soluzione.
Procedura di risoluzione:
1 - Eseguire vcpkg integrate install
per l'istanza vcpkg da usare
Eseguire vcpkg integrate install
per abilitare l'integrazione globale con MSBuild. Questa operazione deve essere eseguita una sola volta per abilitare l'istanza vcpkg per tutti i progetti.
Impossibile installare i pacchetti usando la modalità classica
L'uso del vcpkg install
comando ha esito negativo con il messaggio seguente:
error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.
Causa 1: Uso della copia incorporata di Visual Studio di vcpkg
Visual Studio 2022 include una copia di vcpkg installabile con il flusso di lavoro C++. Questo vcpkg in bundle viene installato in un percorso di sola lettura e, di conseguenza, non può essere usato in modalità classica.
Si usa un terminale incorporato di Visual Studio o un'istanza di Visual Studio Developer PowerShell con una copia del vcpkg in bundle nel relativo PERCORSO.
Procedura di risoluzione:
1 - Creare un file manifesto (vcpkg.json
) per installare le dipendenze del progetto.
2 - Se si dispone di un'istanza autonoma di vcpkg, è possibile usarla impostando la VCPKG_ROOT
variabile e aggiungendo il percorso di installazione alla PATH
variabile.
$env:VCPKG_ROOT="path/to/standalone/vcpkg"
$env:PATH="$env:PATH;$env:VCPKG_ROOT"
Il problema non è riportato nell'elenco
Se il problema non è elencato qui, visitare il repository per creare un nuovo problema.