Aracılığıyla paylaş


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:

  1. Dizine vcpkg/versions gidin.
  2. 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.
  3. 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ı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:

  1. 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ıngit pull.
  2. Kullanılabilir sürümleri denetleyin:
    • Sürümler veritabanında kullanılabilen sürümlerden birini seçin.
  3. 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.
  4. 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:

  1. 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ındaki versions/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.
  2. İ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:

  1. Tam kopyaya dönüştürme

    • Bu sorunun en kolay çözümü tam kopyaya dönüştürmektir:
    git fetch --unshallow
    
  2. 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 Ybağımlılığınız vardır ve bu da kitaplığına Xbağ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 fooyü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 Xyaymaz "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": falseiç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.