2017-10-04 142 views
4

我在Rust中编写了两个库(具有C兼容接口),我试图将它们集成到iOS应用程序中。在iOS应用程序中添加多个静态Rust库

当在同一项目中集成两个.a文件,我得到的错误,因为从防锈标准库符号现在出现多次:

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) 
... 

这又如何解决呢? Rust符号可以提取到单独的库中吗?或者符号是否可以命名空间?

+0

您可以尝试将这两个依赖项编译为一个.a库,只需先生锈,然后将生成的.a集成到您的项目中。 – Mikola

+1

当然,这在我的情况下会起作用,但如果您集成第三方库,在一般情况下它不是一个好的解决方案。 –

回答

0

在本文发布时,流行的理论是,当启用链接时优化(LTO)并且由于rustc生成的静态库中的错误导致(link)时,会出现此问题。

作为临时措施,有人建议LTO在解决此问题之前不应启用。

+0

*流行的理论*; *已经提出*。这实际上工作吗?你试过了吗? – Shepmaster