2016-10-04 1 views
7

Pour les projets de caisse simple, l'ajout de ces lignes à Cargo.toml fonctionne comme prévu.Comment utiliser panic = annuler avec des dépendances externes?

[profile.release] 
panic = "abort" 

ensuite construire le projet:

cargo build --release 

Cependant, sur un projet qui a des dépendances indirectement utilisées, je me fais une erreur. La caisse c_vec est une dépendance indirectement utilisée. Comment utiliser panic=abort sur un projet multi-caisse sans conflits?

Comment utiliser panic=abort sur un projet multi-caisse sans conflits?


Détails Incase elles sont importantes:

  • Rustc 1.12.0
  • bibliothèque numéro: lodepng-rust
  • Linux, 64bit
+0

Quelle est votre version de rouille? En ce moment, je ne peux même pas obtenir c_vec pour le tester. – LinearZoetrope

+0

@Jsor, ajouté des détails – ideasman42

+0

merci, et que faites-vous exactement pour déclencher la panique? – LinearZoetrope

Répondre

3

On dirait que c'est parce c_vec Précise dylib comme un de ses types de bibliothèques.

J'ai déposé cela comme une question sur Github ici: https://github.com/rust-lang/cargo/issues/2738

et a obtenu une réponse d'un des devs:

ah, malheureusement, c'est un mauvais message d'erreur, mais il est à cause de type caisse = ["dylib", "rlib"] dans la case c_vec. Cette provoque le Cargo à passer -C prefer-dynamic qui lie au dylib que nous livrons qui est compilé contre panic_unwind, signifiant que le mode d'abandon est en effet invalide (cette erreur vient du compilateur).

La solution ici serait de supprimer "dylib" de la caisse c_vec.

Bien sûr, vous auriez à fourche votre lodepng et c_vec pour prendre soin de cela.

+0

Je ne me souviens pas de la technique en main, mais je me souviens avoir lu que Cargo supporte les superpositions de dépendances locales, donc je suppose vous n'avez besoin de bifurquer 'c_vec' que si c'est le seul qui spécifie' dylib'. – ssokolow