次の方法で共有


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.txtvcpkg.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します。
  • を渡します。-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"

問題がこの一覧に含まれていない

問題がここに記載されていない場合は、リポジトリにアクセスして新しい問題を作成してください。