2016-10-04 32 views
7

Tek kasa projeleri için, bu satırların Cargo.toml'a eklenmesi beklendiği gibi çalışır.Panik = harici bağımlılıklarla nasıl iptal edilir?

cargo build --release 

Ancak dolaylı kullanılan bağımlılıkları olan bir proje üzerinde, bir hata alıyorum:

[profile.release] 
panic = "abort" 

Ardından projeyi oluşturun.

Compiling c_vec v1.0.12 
error: the linked panic runtime `panic_unwind` is not compiled with this crate's panic strategy `abort` 

error: aborting due to previous error 

Build failed, waiting for other jobs to finish... 
error: Could not compile `c_vec`. 

c_vec sandık bir dolaylı olarak kullanılan bağımlılığıdır.

Çakışma olmadan çok katmanlı bir projede panic=abort nasıl kullanılır? önemli olduklarına örtmek


Detayları:

  • Rustc konuyla 1.12.0
  • Kütüphanesi: o kadar dylib çünkü c_vec belirliyorsa gibi lodepng-rust
  • Linux 64bit
+0

Pas sürümü nedir? Mevcut gecede, bunu test etmeye yardım etmek için c_vec'i bile alamıyorum. – LinearZoetrope

+0

@Jsor, – ideasman42

+0

detaylarını ekledi ve paniği tetiklemek için tam olarak ne yapıyorsunuz? – LinearZoetrope

cevap

3

görünüyor kütüphane türlerinden biri.

Burada Github bir sorun olarak dosyalanmış: https://github.com/rust-lang/cargo/issues/2738

Ve devs birinden bir cevap var:

ah ne yazık ki kötü bir hata mesajı yok ama bunun sebebi sandık tipi var c_vec sandığında = ["dylib", "rlib"]. Bu , Kargo'nın pass -C'yi tercih etmesine neden olur; bu, panik_unwind'e karşı derlenmiş olan nolu gemiye bağlanan dylib linklerini geçersiz kılar, yani iptal modu gerçekten geçersizdir (bu hata derleyiciden geliyor).

Buradaki düzeltme, "dylib" öğesini c_vec sandığından kaldırmak olacaktır. Tabii

, bu özen lodepng ve c_vec kendi çatal gerekirdi.

+0

Tekniği elden hatırlıyorum, ama Cargo'nun yerel bağımlılık katmanlarını desteklediğini okuduğumu hatırlıyorum. Eğer sadece 'dllib' belirten tek kişi buysa 'c_vec' yazmanız yeterlidir. – ssokolow