2017-10-04 16 views
4

J'ai deux bibliothèques (avec une interface compatible C) écrites dans Rust que j'essaie d'intégrer dans une application iOS.Ajout de plusieurs bibliothèques Rust statiques dans une application iOS

Lors de l'intégration des deux fichiers .a dans le même projet, je reçois des erreurs parce que les symboles de la bibliothèque standard Rust sont maintenant présents plusieurs fois:

duplicate symbol _rust_eh_personality in: 
    /Users/x/Development/ios-client/Y/Rust/lib1_ffi.a(lib1_ffi.0.o) 
    /Users/x/Development/ios-client/Y/Rust/lib2_ffi.a(lib2_ffi.0.o) 
... 

Comment cela peut-il être résolu? Les symboles de rouille pourraient-ils être extraits dans une bibliothèque séparée? Ou les symboles peuvent-ils être espacés?

+0

Vous pouvez essayer de compiler les deux dépendances en une seule bibliothèque .a avec juste la rouille d'abord, puis intégrer le .a résultant dans votre projet. – Mikola

+1

Bien sûr, cela fonctionnerait dans mon cas, mais cela ne peut pas être une bonne solution dans le cas général si vous intégrez des bibliothèques tierces. –

Répondre

0

Au moment de cette publication, la théorie dominante est que ce problème se produit lorsque l'optimisation LTO (Link-Time Optimization) est activée et est causée par un bogue dans les bibliothèques statiques que rustc produit (link).

En tant que mesure temporaire, il a été suggéré que LTO ne devrait pas être activé tant que ce problème a été résolu.

+0

* la théorie dominante *; * il a été suggéré *. Est-ce que cela fonctionne réellement? L'as tu essayé? – Shepmaster