2014-05-12 4 views
2

J'utilise Rust 0,11 avant de compiler simple staticlibbibliothèque statique Rust avertissements « bibliothèque native dissociées »

#![crate_type = "staticlib"] 
#[no_mangle] 
pub extern "C" fn foo() { 
} 

Et puis je compiler avec

rustc foo.rs --crate-type="staticlib" -o foo.a 

Il fonctionne très bien, mais je obtenir les avertissements suivants et je me demande comment les résoudre

warning: unlinked native library: System 
warning: unlinked native library: c 
warning: unlinked native library: m 
+0

Quel système d'exploitation? – huon

+0

Vu cela sur Mac OSX – AJD

+0

pas vraiment sûr de ce qui se passe ici. Peut-être que vous pourriez [déposer un bug] (https://github.com/mozilla/rust/issues/new) sur les avertissements? Merci. – huon

Répondre

1

Je travaillais sur quelque chose d'autre, et je suis heureux ned à rencontrer cela aussi: je sais ce qui se passe.

Un staticlib Rust n'est pas lié à toutes ses dépendances natives. Vous devez vous lier à ces bibliothèques lorsque vous liez le staticlib à un autre programme, par ex. sous Linux, j'ai dû compiler gcc my_c_program.c -L . -lfoo -lc -lpthread -lm -ldlfoo.a était le staticlib de Rust (dans le répertoire courant) et les quatre derniers arguments étaient les bibliothèques qui avaient un avertissement de "bibliothèque native non liée" (strictement parlant le -lc est inutile, puisque les liens du compilateur C par rapport à libc par défaut).

+0

Intéressant, alors comme il est important de signaler ces avertissements il n'y aurait pas moyen de les effacer, c'est juste de me dire ce que j'ai besoin de lier? Je parie que cela explique le crash que j'ai vu en accédant à task_rng dans une bibliothèque statique sans lier les bibliothèques natives. – AJD

+0

@AJD oui, je pense que c'est juste pour vous le dire. Cependant, je suppose que le 'crash '' task_rng' est une "erreur d'exécution fatale"? Si c'est le cas, c'est parce que le 'task_rng' nécessite un [runtime] (http://doc.rust-lang.org/master/guide-runtime.html) pour fonctionner. Vous pouvez en démarrer un sur le thread actuel en utilisant ['native :: start'] (http://doc.rust-lang.org/master/native/fn.start.html). – huon

+0

@AJD, btw cette question m'a incité [pour rendre le message d'erreur plus clair] (https://github.com/mozilla/rust/pull/14472). – huon

Questions connexes