Vcpkgライブラリのインストールに失敗しました

3282 ワード

に縁を付ける


OAuth 2.0とC++REST SDKの使用例ではトークンを取得できないという問題に遭遇し、最終的には最新のC++REST SDKを使用していることが分かったが、ローカルにインストールされているのは最新ではなく、多くの時間を費やして最終的にサンプルを貫通した.そこでその後Vcpkgを更新しましたが、C++ REST SDKはインストールできません!

Vcpkgの変化


最新バージョンでは、C++ REST SDKCONTROLのようなライブラリ構築依存性が追加されました.
Source: cpprestsdk
Version: 2.9.0-1
Build-Depends: zlib [windows], openssl [windows], boost [windows]
Description: C++11 JSON, REST, and OAuth library
  The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
Build-Dependsが追加されました.すなわち、cpprestsdkをインストールしようとすると、zlib、openssl、boostの依存関係が先にインストールされます.

boostをダウンロードするのは大変です


ネットワークのせいでzlibのインストールが完了した後、boostダウンロードのステップに引っかかりました・・・最後に、boostソースパッケージを手動でダウンロードしてvcpkg/downloadsの下に置いてからboostのインストールに成功しました.

Openssl構築に失敗しました


Opensslの構築に失敗しました.vcpkg/buildtrees/opensslの構築ログを開くと、ソースコードのutil/copy.plを使用してファイルをコピーできなかったことがわかりました.
以前perlスクリプトを書いたことがありますが、長い間使わなかったので、少し疎かで、printの大法を使った後、複製を実行する時、伝達されたファイルのリストが"号に包まれていることを発見しました.もともと複製ms/applink.cで、"が付加されたため、複製"ms/applink.c"になったので、対応するファイルが見つかりませんでした.
私のコンピュータの上でCmderを使って、perl解釈器を内蔵して、そこでその原因だと疑って、しかしperlをダウンロードして時間がかかりすぎて、仕方なくcopy.plを調整します.copy.plスクリプトの22行目に添付され、次の情報が表示されます.
$arg =~ s|\\|/|g;   # compensate for bug/feature in cygwin glob...
foreach (glob "\"$arg\"")

コンストラクションログに表示されるcopy_if_different.plの実行に問題はないため、比較では次のような問題が発生します.
foreach (glob "\"$arg\"") # copy.pl
foreach (glob $arg) # copy_if_different.pl
{
    push @filelist, $_;
}

perlについて知っていることはすべて知っていて、$_は前回の結果を得て、copy.plの書き方の中で"で文字列を包んで、それによって前の問題を招きました.

Opensslの解決方法


調整したcopy.plを元のcopy.plに置き換えるといいですが、どうやって置き換えますか?
  • copy.plvcpkg/ports/openssl
  • に配置する.
  • は、portfile.cmakeにおいてcopy.plをソースコードパス
  • にコピーする.
    file(COPY
    ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt
    ${CMAKE_CURRENT_LIST_DIR}/PerlScriptSpaceInPathFixes.patch
    ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch
    ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch
    ${CMAKE_CURRENT_LIST_DIR}/copy.pl
    DESTINATION ${SOURCE_PATH})
    
  • vcpkg\ports\opensslCMakeLists.txtを修正し、copy.plを正しい位置にコピーする構築プロセスの制約により、前のステップではcopy.plを正しい位置にコピーすることができず、さらに一歩進む必要がある.
  • vcpkg_apply_patches(
        SOURCE_PATH ${SOURCE_PATH}
        PATCHES ${CMAKE_CURRENT_LIST_DIR}/PerlScriptSpaceInPathFixes.patch
                ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch
                ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch
    )
    
    file(COPY
    ${CMAKE_CURRENT_LIST_DIR}/copy.pl
    DESTINATION ${SOURCE_PATH}/util)
    

    まとめ


    構築されたプロセスは変化しないが、Vcpkgの実現を理解し、従来の構造プロセスを理解し、問題に遭遇したときに多く分析し、多く考えることで、問題を解決することができる.