vcpkg ポートでのビルド エラーのトラブルシューティング
このガイドは、vcpkg を使用してポートインストール中に問題が発生しているユーザーを対象としています。
エラー ログを見つける
ビルドエラーは、ほぼ無限の理由で発生する可能性があります。 vcpkg がポートのビルドに失敗した場合、その理由を診断する最初の手順は、ログ ファイルを読み取る方法です。
vcpkg は、ポートの構築中に呼び出される外部プロセスごとにログ ファイルを生成します。 エラーが発生すると、vcpkg は、エラーが発生する前に実行された最後のプロセスのログ ファイルの場所を出力します。 vcpkg の出力で 、"詳細についてはログを参照してください:" という行を探します。
例: ログ ファイルの場所の出力
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
生成されたすべてのログ ファイルを見つけるには、$VCPKG_ROOT/buildtrees/<port>/
にあるポートのbuildtrees
ディレクトリを調べます (<port>
を適切なポート名に置き換えます)。
ポートの資産をダウンロードできませんでした
Note
キャッシュを使用するとキャッシュされた資産を継続的に利用できるようにすることで、このような問題を軽減できます。
ポートをインストールすると、ネットワークから資産をダウンロードするときにエラーが発生します。
CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:32 (message):
Failed to download file with error: 1
原因 1: ダウンロード URL が無効になった
理由により、vcpkg の制御 URL の外部が無効になる可能性があります。 破損したリンクは、Web ブラウザーを使用してダウンロード URL に移動することで診断できます。リンクが壊れていると、404 状態コードが生成されます。
解決手順:
1 - 資産の代替ダウンロード URL を使用するようにポートを変更します。
原因 2: ファイルのハッシュが、予想される 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
このエラーは、アップストリーム ファイルがサーバーによって何らかの方法で変更されたが、ダウンロード URL が同じままである場合に発生します。 セキュリティ対策として、vcpkg は、資産に対して想定される SHA512 と一致しない SHA512 を持つファイルを拒否します。
解決手順:
1 - ダウンロードしたファイルがセキュリティで保護されていることを確認する 2 - 新しいファイルの SHA512 を使用するようにポートを変更する
Visual Studio ツールチェーンが見つかりません
ポート vcpkg をインストールするときに、適切なツールチェーンを見つけることができません。
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
原因 1: ターゲット アーキテクチャに適したツールチェーンがインストールされていない
Visual Studio インスタンスが目的の vcpkg バージョンと一致し、このエラーが発生した場合、最も可能性の高い原因は、適切なツールチェーンがインストールされていないことです。
- Visual Studio インストーラーを開き、適切なツールチェーンをインストールします。
原因 2: 選択した Visual Studio のバージョンが正しくありません
必要なツールチェーンがインストールされている場合、vcpkg が、ツールチェーンがインストールされていない間違ったバージョンの Visual Studio を選択している可能性があります。 詳細については、Visual Studio 選択アルゴリズムの ドキュメント を参照してください。
解決手順:
1 - VCPKG_PLATFORM_TOOLSET
を適切なバージョンに設定します。
2 - または、 VCPKG_VISUAL_STUDIO_PATH
を目的の Visual Studio インスタンスのインストール パスに設定します。
不足しているシステムの依存関係
必要なビルド ツールまたはシステムの依存関係が環境にインストールされていません。
例: ポートにはシステムの依存関係が必要
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
システムの依存関係を必要とするほとんどの vcpkg ポートでは、インストール時にメッセージが出力されます。 場合によっては、必要なシステム依存関係の一覧が不完全な場合があります。 この種類の問題の診断は、基になる構築されたシステムによって異なります。エラー ログを確認障害の原因を特定します。
解決手順:
1 - 適切な手順に従って、不足しているシステム依存関係を環境にインストールします。
ビルド プロセス中に FetchContent 依存関係が見つかりません
によって依存関係が満たされたため、ビルドが失敗する FetchContent
はビルド プロセス中は使用できません。
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 は、CMake 変数FETCHCONTENT_FULLY_DISCONNECTED
を使用してFetchContent
を無効にします。
この機能を無効にするための複数の動機があります。いくつかの名前を付けます。
FetchContent
は、ポートに対するベンダーの依存関係を非表示にすることができます。FetchContent
は、完全に切断されたシナリオとうまく対話しません。FetchContent
を介して取得された依存関係は、ABI ハッシュ計算に参加しなくてもビルドを変更できます。
ポートメンテナーの場合は、 FetchContent
を介して取得したパッケージを vcpkg 依存関係に変換することをお勧めします。 ただし、一般的に使用するには、 FetchContent
を有効にする回避策があります。
解決手順:
1 - 使用 VCPKG_CMAKE_CONFIGURE_OPTIONS
を設定する FETCHCONTENT_FULLY_DISCONNECTED=FALSE
vcpkg でインストールされた依存関係がプロジェクトのビルド中にリンクされない
マニフェスト モードまたはクラシック モードを使用してプロジェクトをビルドする場合、vcpkg の依存関係は読み込まれず、プロジェクトにリンクされないため、ビルドエラーが発生します。
vcpkg はライブラリの自動リンケージを提供し、 CMake および MSBuild プロジェクトのディレクトリを含めます。 vcpkg を介してインストールされた依存関係は、プロジェクトで自動的に使用できる必要があります。
原因 1: 必要な依存関係がインストールされていない
解決手順:
1 - プロジェクトの依存関係の準備ができていることを確認します。
manifest ファイル (vcpkg.json
)を使用している場合は、CMakeList.txt
ファイルを含む同じディレクトリにファイルがあることを確認します。 また、マニフェストの "dependencies"
フィールドにすべての依存関係が表示されていることを確認します。 vcpkg は、プロジェクトのビルド時にマニフェストに依存関係を自動的にインストールします。
vcpkg CLI を使用してパッケージをインストールする場合はクラス モードでプロジェクトのビルドを実行する前に、必要なすべての依存関係がプレインストールされていることを確認してください。 vcpkg は、クラシック モードで使用する場合、プロジェクトに必要なパッケージを自動的にインストールしません。
原因 2: ビルド システムの統合が有効になっていない
CMake
解決手順:
1 - CMAKE_TOOLCHAIN_FILE
変数を vcpkg ツールチェーンに 設定します。
CMAKE_TOOLCHAIN_FILE
は、{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
にある vcpkg CMake ツールチェーン ファイルを指すように設定する必要があります。必ず、{VCPKG_ROOT}
を vcpkg インストール ディレクトリへの正しいパスに置き換えてください。
次のいずれかの方法を使用して、ツールチェーン ファイルを設定できます。
CMakePresets.json
ファイルの使用:- バージョン 3 以降を使用する場合は、
toolchainFile
を設定します。 - バージョン 2 以前を使用する場合は、
CMAKE_TOOLCHAIN_FILE
をcacheVariable
として設定します。
- バージョン 3 以降を使用する場合は、
- を渡します。
-DCMAKE_TOOLCHAIN_FILE={VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
CMake 呼び出し中のコマンド ライン引数。 CMakeList.txt
ファイルにCMAKE_TOOLCHAIN_FILE
を設定します。project()
の呼び出しの前に、この変数が設定されていることを確認します。
CMAKE_TOOLCHAIN_FILE
を使用してカスタム ツールチェーン ファイルを既に使用している場合は、VCPKG_CHAINLOAD_TOOLCHAIN_FILE
カスタム ツールチェーンを指す カスタム トリプレット を使用します。
MSBuild
vcpkg は、 vcpkg integrate install
コマンドを使用してグローバル統合メカニズムを提供します。
コマンドを 1 回実行すると、msBuild を使用するすべてのプロジェクトに対して、 manifest モード または classic モードで vcpkg 統合が有効になります。
この統合は、コマンドの実行元の vcpkg インスタンスに固有であるため、複数の vcpkg インスタンスがある場合は、その特定のインスタンスにインストールされているツール バージョンとパッケージのみがプロジェクトで使用できます。
1 つのプロジェクトまたはソリューションに対して vcpkg 統合を有効にする方法については、 MSBuild 統合 ドキュメントを参照してください。
解決手順:
1 - 使用する vcpkg インスタンスの vcpkg integrate install
を実行する
vcpkg integrate install
を実行して、MSBuild とのグローバル統合を有効にします。 これを行う必要があるのは、vcpkg インスタンスがすべてのプロジェクトで有効になるまで 1 回だけです。
クラシック モードを使用してパッケージをインストールできない
vcpkg install
コマンドの使用が失敗し、次のメッセージが表示されます。
error: Could not locate a manifest (vcpkg.json) above the current working directory.
This vcpkg distribution does not have a classic mode instance.
原因 1: vcpkg の Visual Studio 埋め込みコピーを使用する
Visual Studio 2022 には、C++ ワークフローと共にインストール可能な vcpkg のコピーが含まれています。 このバンドルされた vcpkg は、読み取り専用の場所にインストールされるため、 クラス モードでは使用できません。
Visual Studio 埋め込みターミナルまたはパッケージ化された vcpkg のコピーを PATH に含む VS Developer PowerShell を使用している。
解決手順:
1 - マニフェスト ファイル (vcpkg.json
) を作成して、プロジェクトの依存関係をインストールします。
2 - vcpkg のスタンドアロン インスタンスがある場合は、代わりに VCPKG_ROOT
変数を設定し、インストール パスを PATH
変数に追加して使用できます。
$env:VCPKG_ROOT="path/to/standalone/vcpkg"
$env:PATH="$env:PATH;$env:VCPKG_ROOT"
問題がこの一覧に含まれていない
vcpkg