Sürüm oluşturma sorun giderme kılavuzu
Bu kılavuz, sürüm oluşturma ile ilgili sorunlar yaşayan kullanıcılara yöneliktir.
Bağlantı noktası için sürüm dosyasını inceleme
Not
Aşağıda açıklanan işlemin vcpkg kayıt defterindeki bağlantı noktaları için çalışması amaçlanmıştır. Sürüm oluşturma veritabanının özel kayıt defterlerinde nasıl uygulandığını öğrenmek için kayıt defteri belgelerimize bakın.
Belirli bir bağlantı noktasının sürüm veritabanını incelemek için:
- Dizine
vcpkg/versions
gidin. - Bağlantı noktasının klasörünü bulun:
- Bağlantı noktasının ilk harfine karşılık gelen klasörü bulun. Örneğin, adlı
f-
klasörü açmak içinfmt
.
- Bağlantı noktasının ilk harfine karşılık gelen klasörü bulun. Örneğin, adlı
- Bağlantı noktaları sürüm dosyasını açın:
- Bağlantı noktasıyla aynı ada sahip JSON dosyasını bulun. Örneğin, sürüm dosyasının
fmt
adıfmt.json.
- Bağlantı noktasıyla aynı ada sahip JSON dosyasını bulun. Örneğin, sürüm dosyasının
Bağlantı noktasının sürüm dosyası, sürüm etiketleri ve buna karşılık gelen Git ağaç nesnesi karması gibi ayrıntıları içeren kullanılabilir sürümlerin listesini içerir. Bu bilgiler vcpkg tarafından belirli bağlantı noktası sürümlerini almak için gereklidir. Bildirim dosyalarınızda yalnızca bu listede yer alan sürümler kullanılabilir.
Sürüm oluşturma hakkında daha fazla bilgi için başvuru belgelerimize bakın:
Bildirim kullanma hakkında daha fazla bilgi için bkz. bildirim
Neden: Paketin var olmayan bir sürümünü isteme
Bildirim dosyasında belirtilen bir sürüm vcpkg sürüm veritabanında mevcut olmadığında, vcpkg bağımlılığı çözümleyemiyor ve aşağıdakine benzer bir hata iletisi üretir:
error: no version database entry for fmt at 100.0.0
Available versions:
10.1.1
10.1.0
10.0.0
9.1.0#1
9.1.0
9.0.0
8.1.1#2
8.1.1#1
...
See `vcpkg help versioning` or https://zcusa.951200.xyz/vcpkg/users/versioning for more information.
Bu sorunu çözmek için:
- Sürüm veritabanını güncelleştirin:
- İstediğiniz sürüm, sürümler veritabanının yerel kopyasında olmayabilir. Bu durumda, vcpkg kayıt defterini en son işlemeye güncelleştirmek için komutunu çalıştırın
git pull
.
- İstediğiniz sürüm, sürümler veritabanının yerel kopyasında olmayabilir. Bu durumda, vcpkg kayıt defterini en son işlemeye güncelleştirmek için komutunu çalıştırın
- Kullanılabilir sürümleri denetleyin:
- Sürümler veritabanında kullanılabilen sürümlerden birini seçin.
- Bildirim dosyasını güncelleştir:
- Dosyanızı
vcpkg.json
düzenleyin. - Belirtilen sürümü vcpkg deposunda kullanılabilen bir sürümle değiştirin. Örneğin, "version>=": "100.0.0" yerine "version>=": "10.1.1" değerini değiştirin.
- Dosyanızı
- vcpkg yüklemesini çalıştırın:
vcpkg install
Terminalinizde veya komut isteminizde komutu yeniden yürütür.
Neden: Farklı düzenler arasında sürüm kısıtlaması belirtme
Bir bağımlılık için dosyada vcpkg.json
belirtilen sürüm, vcpkg deposunun temel sürümünde kullanılandan farklı bir sürüm oluşturma düzeni kullandığında sürüm düzeni çakışması oluşur. Vcpkg farklı düzenlerdeki sürümleri karşılaştıramadığı için bu hatayla sonuçlanır.
Bildirilen version>=
bir kısıtlama temel sürümde kullanılandan farklı bir sürüm düzeni kullanıyorsa, vcpkg hangi sürümün diğerinden büyük veya eşit olduğunu belirleyemez.
Örneğin, şunu belirtirseniz:
{
"dependencies": [
{
"name": "boost-regex",
"version>=": "1.75.0"
}
]
}
vcpkg aşağıdaki hata iletisini döndürür:
error: version conflict on boost-regex:x64-windows: required 1.75.0, which cannot be compared with the baseline version 1.83.0.
The versions have incomparable schemes:
boost-regex@1.83.0 has scheme relaxed
boost-regex@1.75.0 has scheme string
This can be resolved by adding an explicit override to the preferred version. For example:
"overrides": [
{ "name": "boost-regex", "version": "1.83.0" }
]
See `vcpkg help versioning` or https://zcusa.951200.xyz/vcpkg/users/versioning for more information.
Çözümler:
- Uyumlu bir sürüm şeması kullanın:
- temel ile aynı sürüm oluşturma düzenini kullanan bir sürümünü
boost-regex
bulmak için altındakiversions/b-/boost-regex.json
vcpkg deposundaki sürüm veritabanını inceleyin. - cihazınızdaki
vcpkg.json
kısıtlamayıversion>=
uyumlu bir düzen kullanan bir sürümle güncelleştirin.
- temel ile aynı sürüm oluşturma düzenini kullanan bir sürümünü
- İstenen sürüme geçersiz kıl:
- Farklı bir sürüm oluşturma şeması kullanan belirli bir boost-regex sürümüne ihtiyacınız varsa bildiriminizde bunu geçersiz kılabilirsiniz.
- öğesini
vcpkg.json
istediğiniz sürümü belirten bir geçersiz kılmalar bölümü içerecek şekilde değiştirin:
{ "dependencies": [ { "name": "boost-regex" } ], "overrides": [ { "name": "boost-regex", "version": "1.75.0" } ] }
Neden: Sığ kopyada yetersiz işleme geçmişi
vcpkg sınırlı bir işleme geçmişiyle (sığ kopya) kopyalandığında, belirli sürüm kısıtlamalarını veya taban çizgilerini çözümlemek için gerekli işleme geçmişinden yoksundur. Vcpkg tarafından bağlantı noktalarının belirli sürümlerini almak için kullanılan Git ağaç nesnesi karmaları yalnızca tam işleme geçmişi kullanıma alındığında kullanılabilir. vcpkg, sığ bir depoya ne zaman kopyalandığını algılar ve bağlantı noktası sürümünü alamadığında bir hata iletisi oluşturur.
Örneğin, aşağıdaki gibi belirli bir temele sahip bir vcpkg.json
kullanmak:
{
"dependencies": [
{
"name": "fmt"
}
],
"overrides": [
{
"name": "fmt",
"version": "7.1.3#1"
}
],
"builtin-baseline": "bb588985e37484d543fc849d0d79434e0d45bb3c"
}
Aşağıdaki hatayla sonuçlanır:
error: failed to execute: "C:\Program Files\Git\cmd\git.exe" "--git-dir=C:\dev\demo\vcpkg\.git" "--work-tree=C:\dev\demo\vcpkg\buildtrees\versioning_\versions\fmt\4f8427eb0bd40da1856d4e67bde39a4fda689d72_26648.tmp" -c core.autocrlf=false read-tree -m -u 4f8427eb0bd40da1856d4e67bde39a4fda689d72
vcpkg was cloned as a shallow repository in: C:\dev\demo\vcpkg\.git
Try again with a full vcpkg clone.
error: git failed with exit code: (128).
fatal: failed to unpack tree object 4f8427eb0bd40da1856d4e67bde39a4fda689d72
note: while checking out port fmt with git tree 4f8427eb0bd40da1856d4e67bde39a4fda689d72
Bu hata, paketin fmt
belirli bir sürümü için gereken işlemenin (4f8427eb0bd40da1856d4e67bde39a4fda689d72
) sığ kopyada kullanılamadığını gösterir.
Çözümler:
Tam kopyaya dönüştürme
- Bu sorunun en kolay çözümü tam kopyaya dönüştürmektir:
git fetch --unshallow
GitHub Actions'ı Kullanma (Varsayılan Sığ Klonlar)
- GitHub Actions genellikle basit kopyaları varsayılan olarak kullanır. Bu sorunu geçici olarak çözmek için GitHub Actions iş akışını değiştirerek tam kopya gerçekleştirebilirsiniz. vcpkg kullanmadan önce aşağıdaki adımı ekleyin:
- name: Convert to Full Clone run: git fetch --unshallow
Neden: Geçişli bağımlılıklara varsayılan özelliklerin beklenmedik şekilde eklenmesi
vcpkg ile bağımlılıkları yönetirken, geçişli bağımlılıkların projeniz için bu özellikleri istemeseniz bile varsayılan özellikleriyle yüklendiğini fark edebilirsiniz. Bu durum, son derlemenizde beklenmeyen bir şişkinliğe veya işlevselliğe yol açabilir.
Senaryo
kitaplığına Y
bağımlılığınız vardır ve bu da kitaplığına X
bağlıdır. Kitaplık X
, projenizin dışında tutmak istediğiniz varsayılan foo
özelliklere sahiptir. Kitaplık Y
için en üst düzey bildiriminiz aşağıdakine benzer olabilir:
{
"name": "my-project",
"dependencies": [
{
"name": "Y",
"features": ["featureB"],
"default-features": false
}
]
}
Bu ayarın X
varsayılan özellikleri olmadan yüklenmesini "default-features": false
bekliyorsunuz. Ancak, X
varsayılan özelliğiyle foo
yüklenmeye devam edilir.
Nedeni
default-features
özelliği yalnızca en üst düzey bildirimde kabul edilir. Bu, geçişli bağımlılıkların varsayılan özelliklerinin (bu senaryoda olduğu gibi X
) en üst düzeyde açıkça devre dışı bırakılmadığı sürece yine de dahil olduğu anlamına gelir. Kitaplık Y
çözümlendiğinde, vcpkg
ayarı geçişli bağımlılığına X
yaymaz "default-features": false
ve varsayılan özellikleriyle yüklenmesine X
neden olur.
Çözüm
gibi X
geçişli bağımlılıkların varsayılan özellikleri olmadan yüklendiğinden emin olmak için, bunları üst düzey bildiriminizdeki bağımlılıkları yönlendirecek şekilde yükseltmeniz ve varsayılan özelliklerini açıkça devre dışı bırakmanız gerekir. 'nizi vcpkg.json
doğrudan ile "default-features": false
içerecek X
şekilde değiştirin:
{
"name": "my-project",
"dependencies": [
{
"name": "Y",
"features": ["featureB"]
},
{
"name": "X",
"default-features": false
}
]
}
Bu yaklaşım, varsayılan özellikleri hariç tutmak için açık yönergeye sahip doğrudan bir bağımlılık olduğundanX
, varsayılan özellikleri olmadan yüklenmesini sağlarX
.
Varsayılan özelliklerin nasıl çalıştığı ve bunları nasıl yönetecekleri hakkında daha ayrıntılı bilgi için varsayılan özellikler kavramı makalesine bakın.
Sorun burada listelenmiyor
Sorununuz burada listelenmiyorsa, yeni bir sorun oluşturmak için depomuzu ziyaret edin.