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 - または、目的の Visual Studio インスタンスの VCPKG_VISUAL_STUDIO_PATH
インストール パスを設定します。
不足しているシステムの依存関係
必要なビルド ツールまたはシステムの依存関係が環境にインストールされていません。
例: ポートにはシステムの依存関係が必要
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 は FetchContent
CMake 変数 FETCHCONTENT_FULLY_DISCONNECTED
を介して無効になります。
この機能を無効にするための複数の動機があります。いくつかの名前を付けます。
FetchContent
は、ポートに対するベンダーの依存関係を非表示にすることができます。FetchContent
は、完全に切断されたシナリオとうまく対話しません。- 経由で
FetchContent
取得された依存関係は、ABI ハッシュ計算に参加しなくてもビルドを変更できます。
ポート メインコンテナーの場合は、取得したFetchContent
パッケージを vcpkg 依存関係にすることをお勧めします。 しかし、一般的な使用のために有効 FetchContent
にする回避策があります.
解決手順:
1 - 使用 VCPKG_CMAKE_CONFIGURE_OPTIONS
を設定する FETCHCONTENT_FULLY_DISCONNECTED=FALSE
vcpkg でインストールされた依存関係がプロジェクトのビルド中にリンクされない
マニフェスト モードまたはクラシック モードを使用してプロジェクトをビルドする場合、vcpkg の依存関係は読み込まれず、プロジェクトにリンクされないため、ビルドエラーが発生します。
vcpkg は、ライブラリの自動リンケージを提供し、CMake および MSBuild プロジェクト用のディレクトリを含めます。 vcpkg を介してインストールされた依存関係は、プロジェクトで自動的に使用できる必要があります。
原因 1: 必要な依存関係がインストールされていない
解決手順:
1 - プロジェクトの依存関係の準備ができていることを確認します。
マニフェスト ファイル ()を使用している場合は、ファイルがファイルを含む同じディレクトリに配置されていることを確認しますCMakeList.txt
。vcpkg.json
また、マニフェストのフィールドにすべての依存関係が "dependencies"
表示されていることを確認します。 vcpkg は、プロジェクトのビルド時にマニフェストに依存関係を自動的にインストールします。
vcpkg CLI を使用してクラシック モードでパッケージをインストールする場合は、プロジェクトのビルドを実行する前に、必要なすべての依存関係がプレインストールされていることを確認してください。 vcpkg は、クラシック モードで使用する場合、プロジェクトに必要なパッケージを自動的にインストールしません。
原因 2: ビルド システムの統合が有効になっていない
CMake
解決手順:
1 - 変数を CMAKE_TOOLCHAIN_FILE
vcpkg ツールチェーンに設定します。
に CMAKE_TOOLCHAIN_FILE
配置 {VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
されている vcpkg CMake ツールチェーン ファイルを指すように設定する必要があります。vcpkg インストール ディレクトリへの正しいパスに置き換えてください {VCPKG_ROOT}
。
次のいずれかの方法を使用して、ツールチェーン ファイルを設定できます。
- ファイルの
CMakePresets.json
使用:- バージョン 3 以降を使用する場合に設定
toolchainFile
します。 - バージョン 2 以前を使用する場合は a
cacheVariable
として設定CMAKE_TOOLCHAIN_FILE
します。
- バージョン 3 以降を使用する場合に設定
- を渡します。
-DCMAKE_TOOLCHAIN_FILE={VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
CMake 呼び出し中のコマンド ライン引数。 - ファイルに設定
CMAKE_TOOLCHAIN_FILE
しますCMakeList.txt
。 を呼び出すproject()
前に、この変数が設定されていることを確認します。
を使用してカスタム ツールチェーン ファイルを既に CMAKE_TOOLCHAIN_FILE
使用している場合は、VCPKG_CHAINLOAD_TOOLCHAIN_FILE
カスタムツールチェーンを 指すカスタムトリプレット を介して。
MSBuild
vcpkg は、コマンドを使用してグローバル統合メカニズムを vcpkg integrate install
提供します。
コマンドが 1 回実行されると、マニフェスト モードまたはクラシック モードのいずれかで、MSBuild を使用するすべてのプロジェクトに対して vcpkg 統合が有効になります。
この統合は、コマンドの実行元の vcpkg インスタンスに固有であるため、複数の vcpkg インスタンスがある場合は、その特定のインスタンスにインストールされているツール バージョンとパッケージのみがプロジェクトで使用できます。
単一の プロジェクトまたはソリューションに対して vcpkg 統合を有効にする方法については、MSBuild 統合ドキュメントを参照してください。
解決手順:
1 - 使用する vcpkg インスタンスに対して実行 vcpkg integrate install
する
MSBuild とのグローバル統合を有効にするために実行 vcpkg integrate install
します。 これを行う必要があるのは、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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示