Xamarin: исправление ошибок компоновщика (с помощью FFImageLoading и SDWebImage) - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь интегрировать некоторые страницы Native Forms в существующее приложение Xamarin. iOS, чтобы эти страницы могли быть разделены между несколькими платформами. Я хотел бы использовать Xamarin.FFImageLoading для изображений на этих страницах Native Forms. Обычно это простая задача, и я делал это раньше без каких-либо проблем.

Проблема, с которой я сталкиваюсь в этом конкретном приложении Xamarin. iOS поставляется с пакетом Xamarin.SDWebImage, который уже используется для аналогичной функциональности изображения. Когда эти два пакета NuGet добавляются и на них ссылаются, компоновщик показывает много ошибок «Duplicate Symbol». Я обнаружил, что ошибки связаны с WebP , который, по-видимому, является связующим звеном, которое используют два пакета (из разных источников), которые вызывают конфликты.

Итак, общий вопрос: что я могу сделать, когда две разные нативные библиотеки определяют одинаковые символы?

Это конкретное сообщение об ошибке описано здесь: https://docs.microsoft.com/en-us/xamarin/ios/troubleshooting/mtouch-errors#mt5212 -native-linking -failed-duplicate-symbol- и я считаю, что я сталкиваюсь с "Две разные нативные библиотеки могут определять одни и те же символы". но на этой странице вообще не упоминается, что делать с указанным c причиной.

Я попытался добавить аргументы mtouch, которые, как я думал, могут помочь, такие как --registrar:static и -gcc_flags -dead_strip, и я также попытался добавить операторы [assembly: LinkWith (..., SmartLink = true)] в AssemblyInfo.cs (или файл .csproj). Хотя это не помогло.

К сожалению, мне не разрешено делиться своим исходным кодом, но его очень легко воссоздать, просто сделав новый проект Xamarin. iOS и добавив два пакета. и затем вызывая их обоих с помощью некоторого простого вызова метода в 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)

Так что может быть причиной этих ошибок? Является ли это «Две разные нативные библиотеки определяют одинаковые символы». как я подозреваю или это что то другое? И что я могу с этим поделать?

Два рассматриваемых пакета:

Дополнительная информация:

  • Xamarin. iOS Версия: 13.16.0.13 (сообщество Visual Studio)
  • Xcode 11.4

Спасибо, Рафаэль

1 Ответ

0 голосов
/ 25 апреля 2020

Кажется, что между двумя пакетами существует несовместимость, как вы можете видеть здесь , разработчики открывали проблемы в обоих репозиториях GitHub некоторое время go, уведомляя их о проблеме, без какого-либо разрешения до сих пор , Таким образом, вы не можете использовать оба приложения одновременно.

Вы должны использовать только один из двух, я бы порекомендовал FFImageLoading.

...