Vcpkgライブラリのインストールに失敗しました
3282 ワード
に縁を付ける
OAuth 2.0とC++REST SDKの使用例ではトークンを取得できないという問題に遭遇し、最終的には最新のC++REST SDKを使用していることが分かったが、ローカルにインストールされているのは最新ではなく、多くの時間を費やして最終的にサンプルを貫通した.そこでその後Vcpkgを更新しましたが、
C++ REST SDK
はインストールできません!Vcpkgの変化
最新バージョンでは、
C++ REST SDK
のCONTROL
のようなライブラリ構築依存性が追加されました.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.pl
をvcpkg/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\openssl
のCMakeLists.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の実現を理解し、従来の構造プロセスを理解し、問題に遭遇したときに多く分析し、多く考えることで、問題を解決することができる.