1

一部のネイティブ フォーム ページを既存の Xamarin.iOS アプリケーションに統合して、それらのページを複数のプラットフォーム間で共有できるようにしようとしています。これらのネイティブ フォーム ページの画像に Xamarin.FFImageLoading を使用したいと思います。これは通常、簡単な作業であり、以前は問題なく実行できました。

この特定の Xamarin.iOS アプリケーションで私が直面している問題は、Xamarin.SDWebImage が同様の画像機能に既に使用されているパッケージに付属しています。これら 2 つの NuGet パッケージが追加されて参照されると、リンカーは多くの「重複シンボル」エラーを表示します。エラーはWebPに関連していることがわかりました。これは、競合を引き起こしている 2 つのパッケージが (異なるソースから) 使用するバインディングのようです。

一般的な質問は、2 つの異なるネイティブ ライブラリが同じシンボルを定義している場合、どうすればよいかということです。

この特定のエラー メッセージについては、https ://docs.microsoft.com/en-us/xamarin/ios/troubleshooting/mtouch-errors#mt5212-native-linking-failed-duplicate-symbol-で説明されています。 「2 つの異なるネイティブ ライブラリがたまたま同じシンボルを定義している」という問題に直面しています。しかし、そのページには、その特定の原因について何をすべきかについてはまったく言及されていません。

--registrar:staticandなど、役立つと思われる mtouch 引数を追加してみました。また、AssemblyInfo.cs (または .csproj ファイル) にステートメント-gcc_flags -dead_stripを追加してみました。[assembly: LinkWith (..., SmartLink = true)]しかし、それらは役に立ちませんでした。

残念ながら、ソース コードを共有することはできませんが、まったく新しい Xamarin.iOS プロジェクトを作成して 2 つのパッケージを取り込み、AppDelegate で簡単なメソッド呼び出しを使用して両方を呼び出すだけで、非常に簡単に再作成できます。 .cs (リンク中にどちらも完全に取り除かれないようにするため)。例:

new FFImageLoading.ImageService(); new SDWebImage.FLAnimatedImageView();

プロジェクトがビルドされることを期待していますが、プロジェクトはビルドされず、次のような多くのエラーが表示されます。

Native linking failed, duplicate symbol: '_WebPAllocateDecBuffer'. Duplicate symbol in: /.../liblibwebp.a(buffer_dec.o) (Location related to previous error) Duplicate symbol in: /.../WebP.a(libwebpdspdecode_neon_la-alpha_processing_neon.o) (Location related to previous error)

では、これらのエラーの背後にある理由は何でしょうか? 「2 つの異なるネイティブ ライブラリが同じシンボルを定義している」ということですか。私が疑うように、それとも何か他のものですか?そして、私はそれについて何ができますか?

問題の 2 つのパッケージ:

さらに詳しい情報:

  • Xamarin.iOS バージョン: 13.16.0.13 (Visual Studio コミュニティ)
  • Xコード11.4

ありがとう、ラファエル

4

1 に答える 1